Получение [объекта Promise] при выводе результата обещания - PullRequest
0 голосов
/ 02 марта 2019

Я получаю Result is: [object Promise], когда я зову это обещание.Я хочу иметь возможность работать с данными, которые из него получаются.Я ожидаю, что результатом будет массив сообщений из моей очереди SQS.

В настоящее время у меня в очереди более 10 сообщений, поэтому можно найти некоторые из них.

Это мой код в настоящее время:

let params = {
        QueueUrl: config.aws.serviceQueue,
        VisibilityTimeout: 60, 
        MaxNumberOfMessages: 10
    };

  let getMonitors = sqs.receiveMessage(params).promise();

  let result = getMonitors.then(function(data) {
    console.log('Success');
    return data;
  }).catch(function(err) {
    console.log(err);
  });
console.log(`Result is: ${result}`);

Что мне здесь не хватает?Я очень плохо знаком с обещаниями, поэтому, пожалуйста, потерпите меня, если я не понимаю ваш ответ или вопрос.

Ответы [ 3 ]

0 голосов
/ 02 марта 2019

Затем вы возвращаете что-то и пытаетесь присвоить его любой переменной, у которой в конечном итоге появится обещание.

Что вы можете сделать, это

let params = {
   QueueUrl: config.aws.serviceQueue,
   VisibilityTimeout: 60,
   MaxNumberOfMessages: 10
};`

let getMonitors = sqs.receiveMessage(params).promise();

/*let result = getMonitors.then(function(data) {
     console.log('Success');
     return data;
  }).catch(function(err) {
      console.log(err);
  });*/
//console.log(``Result is: ${result}``);`

getMonitors.then(function (result) {
   console.log(result);
}).catch(function (err) {
   console.log(err);
});

или вы можете использовать Async ижду ::

const someFunction = Async() => {
   /* your all code inside*/
   let result = await getMonitors();
   console.log(Result is: $ {
      result
   });
   or
   console.log(Result is: $ {
      await result
   });
}
0 голосов
/ 03 марта 2019

Возможно, вы пытаетесь просмотреть данные, прежде чем обещание будет выполнено.Async / await, вероятно, поможет.

async function happyLittleFunc() {
  const params = {
    QueueUrl: config.aws.serviceQueue,
    VisibilityTimeout: 60,
    MaxNumberOfMessages: 10
  };

  let getMonitors;

  try {
    getMonitors = await sqsReceieveMessage(params);
  } catch (err) {
    console.log(err);
    return;
  }

  console.log(`Result is: ${getMonitors}`);
}

// Call sqs
function sqsReceieveMessage(params) {
  return new Promise(async (resolve, reject) => {
    let messageData;

    try {
      messageData = await sqs.receiveMessage(params);
    } catch (err) {
      reject(err);
    }

    resolve(messageData);
  });
}

happyLittleFunc();
0 голосов
/ 02 марта 2019

Да, результат getMonitors().then() является объектом обещания, поэтому переменная result действительно является объектом обещания.Вот как работают обещания.

Если вы хотите получить доступ к значению внутри обещания, вы либо используете .then() в обещании, либо await (внутри функции с тегами async).

В этомконкретный код, вы должны просто использовать результат в вашем .then() обработчике.Вот где у вас есть значение.

...