Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/472.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在异步循环中使用array.push?_Javascript_Amazon Web Services_Asynchronous - Fatal编程技术网

Javascript 如何在异步循环中使用array.push?

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.

我试图在一个异步函数中的一个循环内推送,但是在循环结束后,输入到这个数组中的数据不会被保存。我会做错什么

对于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; 返回结果; 我的答复是:

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);
我的返回:返回结果也是[]。