Javascript 等待/异步不在for循环中工作
我想处理一系列数据,如下面的代码所示。在此上下文中,单个批处理只是一个包含值的数组。因此函数sendInBatches()需要一个数组作为输入Javascript 等待/异步不在for循环中工作,javascript,node.js,for-loop,promise,async-await,Javascript,Node.js,For Loop,Promise,Async Await,我想处理一系列数据,如下面的代码所示。在此上下文中,单个批处理只是一个包含值的数组。因此函数sendInBatches()需要一个数组作为输入 async sendInBatches(batches) { for (const batch of batches) { const promises = batch.map(x => asyncMethod(x)); await Promise.all(promises); } } 下面是async
async sendInBatches(batches) {
for (const batch of batches) {
const promises = batch.map(x => asyncMethod(x));
await Promise.all(promises);
}
}
下面是asyncMethod()的代码。请注意,asyncMethod()实际上还没有对提供的参数执行任何操作。它只返回一个在1秒后解析的承诺
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”)
传递到中。然后直接传递,而不是作为
函数的一部分。因此,它将立即对其进行评估。相反,试试看
。然后(()=>console.log(“done”)
您应该会得到您想要的结果
需要
请参阅CRice的部分您正在将console.log(“done”)
传递到。然后直接
,而不是作为函数的一部分。因此,它将立即对其进行评估。相反,尝试。然后(()=>console.log(“done”)
您应该会得到您想要的结果。您是对的!谢谢你的快速回复。真不敢相信我忽略了这么简单的事情。