获取在节点中解析的 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
即函数recieveMessage
returns一个请求。但是我不明白为什么函数调用之后的控制台语句在回调中 console.log 之前是 运行 因为我正在等待它的响应。
日志的顺序让我觉得我遗漏了操作的异步性质和包装函数。
有人 运行 以前参与过这个吗?我已经在这个问题上转了一段时间,似乎无法弄清楚发生了什么。
你必须return承诺才能等待结果
const getMessage = url => {
return sqs.receiveMessage(
{
QueueUrl: url
})
.promise()
.then(data=>{
// process data here
})
.catch(e=>{
// process error here
})
运行从适用于 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
returns一个请求。但是我不明白为什么函数调用之后的控制台语句在回调中 console.log 之前是 运行 因为我正在等待它的响应。
日志的顺序让我觉得我遗漏了操作的异步性质和包装函数。
有人 运行 以前参与过这个吗?我已经在这个问题上转了一段时间,似乎无法弄清楚发生了什么。
你必须return承诺才能等待结果
const getMessage = url => {
return sqs.receiveMessage(
{
QueueUrl: url
})
.promise()
.then(data=>{
// process data here
})
.catch(e=>{
// process error here
})