为什么此代码段无法按预期方式工作,因此在对象填充数据之前调用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);
答案 0 :(得分:4)
外部.map()
调用中的函数不会返回任何内容,因此Promise.all
不会得到任何等待的保证。
解决方案是将内部map()
包装在Promise.all(...)
中并返回:
await Promise.all(Object.keys(files).map((key) => {
return Promise.all(files[key].map(async (file) => {...}));
}));
答案 1 :(得分:-1)
简单解决方案1:
解决方案2:
您也可以使用
npm异步库
async.parallel({
one: function(callback) {
setTimeout(function() {
callback(null, 1);
}, 200);
},
two: function(callback) {
setTimeout(function() {
callback(null, 2);
}, 100);
}
}, function(err, results) {
// results is now equals to: {one: 1, two: 2}
});