Javascript 如何在异步循环中使用array.push?
我试图在一个异步函数中的一个循环内推送,但是在循环结束后,输入到这个数组中的数据不会被保存。我会做错什么 对于cont=0;cont<3;cont+=1{ console.logcont; sqs.receiveMessageparamsReceiveMessage,错误,数据=>{ 如果出错{ console.log'Receive Error',err; }否则如果数据。消息{ const[{MD5OfBody}]=data.Messages; sqsMessages.pushMD5车身; console.logsqs消息; } }; } const result=wait Promise.allsqsMessages; console.logresult; 返回结果; 我的答复是:Javascript 如何在异步循环中使用array.push?,javascript,amazon-web-services,asynchronous,Javascript,Amazon Web Services,Asynchronous,我试图在一个异步函数中的一个循环内推送,但是在循环结束后,输入到这个数组中的数据不会被保存。我会做错什么 对于cont=0;cont{ 如果出错{ console.log'Receive Error',err; }否则如果数据。消息{ const[{MD5OfBody}]=data.Messages; sqsMessages.pushMD5车身; console.logsqs消息; } }; } const result=wait Promise.allsqsMessages; console.
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 []
查看您的代码,我希望出现倒数第二个语句console.logresult;先执行,这意味着控制台结果将为空 如果其余的代码是正确的,我不能很好地说明这一点,那么您应该能够console.log返回结果的最后一行代码 伪代码:
containing function(){
console.log(yourCodeInFunction());
}
该控制台应该给出一个结果,因为它在收到消息之前不会运行 当代码稍后到达await Promise.all时,sqs.receiveMessage中的回调函数仍然处于活动状态,因此sqlMessages数组仍然为空。您需要等待该阵列中的承诺完成
换句话说,创建一个包含承诺的数组,然后等待它们。大概是这样的:
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);
我的返回:返回结果也是[]。