gpt4 book ai didi

javascript - 在 Node 中解析 SQSretrieveMessages

转载 作者:行者123 更新时间:2023-12-03 01:26:25 24 4
gpt4 key购买 nike

在从适用于 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

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

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

有人遇到过这种情况吗?我已经在这个问题上兜了一段时间了,似乎无法弄清楚发生了什么。

最佳答案

你必须返回 Promise 才能等待其结果

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

关于javascript - 在 Node 中解析 SQSretrieveMessages,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51523379/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com