【发布时间】: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