【发布时间】:2020-12-21 06:16:53
【问题描述】:
我在 NodeJS 中创建了一个名为 test-for-each-loop.js 的文件,以尝试通过 mongoose db 包装器将记录保存到 mongodb 数据库。它看起来像这样:
const load = async () => {
const content = [0,0,0,0,0];
await content.forEach(async item=>{
const job = new Job({data:item});
await job.save();
});
process.exit();
};
load();
我从终端运行了这个命令:node test-for-each-loop.js。结果是没有任何东西保存到数据库中。我发现问题是await job.save() 没有执行。我的同事通过将代码更改为以下内容来修复我的代码:
const load = async () => {
const content = [0,0,0,0,0];
await Promise.all(content.map(async item=>{
const job = new Job({data:item});
await job.save();
}));
process.exit();
};
load();
我认为因为我在content.forEach() 前面放了一个await,所以它会在触发process.exit() 之前等待foreach 完成执行。有人可以向我解释为什么await content.forEach 实际上没有等待吗?
我注意到如果我从我的第一个脚本中删除process.exit(),那么await content.forEach 实际上会等待。怎么会?
【问题讨论】:
-
它不会等待。 forEach 不返回任何内容,当然不是承诺。
-
是的,相关问题现在有意义
标签: node.js asynchronous foreach