Javascript 等待/异步不在for循环中工作

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

我想处理一系列数据,如下面的代码所示。在此上下文中,单个批处理只是一个包含值的数组。因此函数sendInBatches()需要一个数组作为输入

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”)
您应该会得到您想要的结果。您是对的!谢谢你的快速回复。真不敢相信我忽略了这么简单的事情。