[英]Writing multiple map functions in Promise.all()
我在一个方法中有两个 Promise.all() 工作块。 我想将这两个 Promise.all() 合二为一。 单个 Promise.all() 包括一个执行异步任务的映射函数。 例子:
let obj1 = [], obj2 = [];
await Promise.all(container1.map(async (item)=>{
obj1.push(await dbCall(item));
}))
await Promise.all(container2.map(async (item)=>{
obj2.push(await dbCall(item));
}))
上面的块填充了 dB 以及本地容器 (obj1,obj2)
然而,在单个 Promise.all([map1,map2]) 中包含这两个 map 函数不会填充本地容器 (obj1,obj2)(dB 按预期更新)
如何在单个 Promise.all() 中包含两个映射函数?
您首先尝试合并两个数组,然后
let obj = [];
container1.foreach((item)=>{
obj.push(dbCall(item));
})
container2.foreach((item)=>{
obj.push(dbCall(item));
})
await Promise.all(obj)
请记住, Array.map
返回一个新数组,在这种情况下是一个 Promises 数组,因为 async/await 函数总是返回 Promises。 所以你传递[map1, map2]
例子将是一个二维数组; 它将是一组 Promise 数组。 像这样的东西:
[[Promise1, Promise2, Promise3, ...], [Promise4, Promise5, Promise6...]]
Promise.all 函数需要一个 Promises 数组,而不是一个 Promises 数组数组,因此它失败了。 你只需要向它传递正确的数组结构,你可以使用Array.concat
(对于 ES5 语法)或扩展运算符(对于 ES6 语法)。
Promise.all(map1.concat(map2));
// OR
Promise.all([...map1, ...map2]);
首先简化您的代码从该数组push
到
const obj1 = await Promise.all(container1.map(dbCall));
const obj2 = await Promise.all(container2.map(dbCall));
然后,要同时运行它们,在它们周围添加另一个Promise.all
:
const [obj1, obj2] = await Promise.all([
Promise.all(container1.map(dbCall)),
Promise.all(container2.map(dbCall)),
]);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.