繁体   English   中英

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

[英]How do i use array.push on async loop?

我正在尝试在异步 function 中的循环内推送,但循环结束后不会保存输入到该数组中的数据。 我会做错什么?


    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()中的回调 function 仍然处于活动状态,因此您的sqlMessages仍然为空。 您需要等待该数组中的承诺完成。

换句话说,创建一个带有 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);

查看您的代码,我希望倒数第二个语句( console.log(result); )在执行其他任何操作之前执行 - 这意味着控制台结果将为空。

如果代码的 rest 是正确的(我不太清楚),您应该能够在返回返回的地方控制台记录结果(显示的最后一行代码)。

伪代码:

containing function(){
    console.log(yourCodeInFunction());
}

该控制台应该给出结果,因为在收到您的消息之前它不会运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM