【问题标题】:Await/Async not working in for loop [duplicate]等待/异步在 for 循环中不起作用 [重复]
【发布时间】:2018-07-15 18:17:02
【问题描述】:

我想批量处理数据,如下面的代码所示。在这种情况下,单个批次只是一个包含值的数组。所以函数 sendInBatches() 需要一个数组作为输入。

async sendInBatches(batches) {
    for (const batch of batches) {
       const promises = batch.map(x => asyncMethod(x));
       await Promise.all(promises);
    }
}

下面是 asyncMethod() 的代码。请注意, asyncMethod() 实际上并没有对提供的参数做任何事情。它只是返回一个在 1 秒后解析的 Promise。

asyncMethod(batch){
    return new Promise((resolve) => {
        setTimeout(
            () => {
                console.log('x');
                resolve();
            }
            , 1000,
        );
    });

}

我尝试运行这样的代码:

sendInBatches([[1,2,3],[4,5,6],[7,8,9]]).then(console.log('done'));

这提供了输出:

done
x
x
x

虽然我希望它返回:

x
x
x
done

我不知道这里出了什么问题,你们有什么想法吗?

【问题讨论】:

  • 您将console.log("done") 直接传递给.then,而不是作为函数的一部分。所以它会立即评估它。相反,试试.then(() => console.log("done")),你应该会得到你想要的结果。
  • 你是对的!感谢您及时的回复。不敢相信我忽略了这么简单的事情。

标签: javascript node.js for-loop promise async-await


【解决方案1】:

已解决:

您将console.log("done") 直接传递给.then,而不是作为 功能的一部分。所以它会立即评估它。相反,尝试 .then(() => console.log("done")) 你应该得到你想要的结果 想要。

comment Crice

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-22
    • 1970-01-01
    • 1970-01-01
    • 2016-12-05
    • 2021-09-09
    • 1970-01-01
    • 2021-10-18
    • 1970-01-01
    相关资源
    最近更新 更多