【发布时间】:2019-03-07 13:56:02
【问题描述】:
我有以下代码,如果远程文件夹不存在,则在本地创建它们:
await remoteFolders
.filter(rf => !localFolders.some(lf => lf === rf))
.forEach(async (rf) => await this.createFolder(rf));
方法 createFolder 如下所示:
async createFolder(folderPath) {
if (!(await fs.exists(folderPath))) {
await fs.mkdir(folderPath);
}
}
问题是,如果我进行调试,我可以看到 forEach 中的 await 被忽略,并且循环不会等到 createFolder 方法完成。所以如果我创建依赖于以前的目录,它显然会失败。
但是,如果我使用 for-loop,它可以正常工作(考虑到 await 并在 createFolder 完成后继续执行循环):
for (let i = 0; i < remoteFolders.length; i++) {
if (!localFolders.some(lf => lf === remoteFolders[i])) {
await this.createFolder(remoteFolders[i]);
}
}
我可以使用这个,但使用 forEach 对我来说看起来更优雅。为什么 forEach 不考虑 await?
【问题讨论】:
-
@jbialobr
Promise.all允许等待所有文件夹的创建,但不链接它们
标签: javascript node.js async-await fs