javascript - 在异步循环中等待 promise

标签 javascript node.js loops promise

为什么此代码片段无法按预期工作,导致在对象填充数据之前调用 console.debug(images)?我希望两个循环并行运行,但是 await Promise.all 应该等待循环完成。第一个循环和第二个循环应该同时运行。

const images = {
     taskImages: [],
     solutionImages: []
};

await Promise.all(Object.keys(files).map((key) => {
    files[key].map(async (file) => {
        const fileId = getFileId(file.path);
        const result = await storeImage(fileId, file.path);
        if (result) {
            images[key].push(fileId);
            console.debug("Pushed " + key);
        }
    });
}));

console.debug(images);

最佳答案

外部 .map() 调用中的函数不会返回任何内容,因此 Promise.all 不会等待任何 Promise。

解决方案只是将内部 map() 包装在 Promise.all(...) 中并返回:

await Promise.all(Object.keys(files).map((key) => {
    return Promise.all(files[key].map(async (file) => {...}));
}));

关于javascript - 在异步循环中等待 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51306689/

相关文章:

javascript - 抓取页面上的所有 URL 进行更改会导致巨大的性能损失

javascript - 如何避免 Node 需要两次加载相同的模块

angularjs - 响应状态为零的 Express Redis session 崩溃

node.js - 尝试访问实时数据库时 Firebase Node.js 管理 SDK 超时

php - 从循环中的对象中删除项目

javascript - 通过多个属性过滤对象的最快方法

javascript - 如何使用接口(interface)类型执行动态类型测试?

javascript - 按钮不在选项卡之间共享操作

c# - 摆脱多重循环?

javascript - 如何对 JavaScript 操作进行计时,以便它们按正确的顺序发生