gpt4 book ai didi

javascript - 如何在异步循环上使用 array.push?

转载 作者:行者123 更新时间:2023-12-02 22:37:33 26 4
gpt4 key购买 nike

我试图在异步函数的循环中进行推送,但循环结束后不会保存输入到该数组中的数据。我会做错什么吗?


for (cont = 0; cont < 3; cont += 1) {
console.log(cont);

sqs.receiveMessage(paramsReceiveMessage, (err, data) => {
if (err) {
console.log('Receive Error', err);
} else if (data.Messages) {
const [{ MD5OfBody }] = data.Messages;
sqsMessages.push(MD5OfBody);

console.log(sqsMessages);
}
});
}

const result = await Promise.all(sqsMessages);

console.log(result);

return result;

我的回应:

2019-11-04T14:35:12.219Z    f00e1408-3ec6-4290-914a-eae4efb23939    INFO    0
2019-11-04T14:35:12.221Z f00e1408-3ec6-4290-914a-eae4efb23939 INFO 1
2019-11-04T14:35:12.223Z f00e1408-3ec6-4290-914a-eae4efb23939 INFO 2
2019-11-04T14:35:12.224Z f00e1408-3ec6-4290-914a-eae4efb23939 INFO []

最佳答案

当代码稍后到达 await Promise.all() 时,sqs.receiveMessage() 中的回调函数仍然处于事件状态,因此您的 sqlMessages code>-array 仍然是空的。您需要等待该数组中的 promise 完成。

换句话说,创建一个包含 Promise 的数组,然后等待它们。像这样的事情:

const promises = [];

for (cont = 0; cont < 3; cont += 1) {
console.log(cont);

promises.push(new Promise((resolve, reject) => {

sqs.receiveMessage(paramsReceiveMessage, (err, data) => {
if (err) {
console.log('Receive Error', err);
reject(err);
} else if (data.Messages) {
const [{ MD5OfBody }] = data.Messages;
sqsMessages.push(MD5OfBody);
console.log(sqsMessages);
resolve(MD5OfBody);
}
});
}));
}

const result = await Promise.all(promises);

console.log(result);

关于javascript - 如何在异步循环上使用 array.push?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58695713/

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