获取在节点中解析的 SQS retrieveMessages

Getting SQS retrieveMessages resolved in Node

运行从适用于 SQS 的 AWS 开发工具包中调用示例代码时,我遇到了一些意想不到的行为。

我有以下代码需要一个队列 URL。

const getMessage = url => {
  return sqs.receiveMessage(
    {
      QueueUrl: url
    },
    (err, data) => {
      if (err) {
        console.log(err, err.stack); // an error occurred
      } else {
        // console.log(data);
        if (data.Messages) {
          const msg = JSON.parse(data.Messages[0].Body);
          console.log("--");
          return msg
        } else {
          console.log("no messages found");
          return {};
        }
      }
    }
  );
};

const messages = await getMessage(<QUEUE_URL>);
console.log('this statement runs before the other console statements')

我从这里的文档中了解到:

https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/SQS.html#receiveMessage-property

即函数recieveMessagereturns一个请求。但是我不明白为什么函数调用之后的控制台语句在回调中 console.log 之前是 运行 因为我正在等待它的响应。

日志的顺序让我觉得我遗漏了操作的异步性质和包装函数。

有人 运行 以前参与过这个吗?我已经在这个问题上转了一段时间,似乎无法弄清楚发生了什么。

你必须return承诺才能等待结果

 const getMessage = url => {
  return sqs.receiveMessage(
    {
      QueueUrl: url
    })
     .promise()
     .then(data=>{
      // process data here
     })
     .catch(e=>{
     // process error here
     })