Hed*_*dge 2 javascript promise async-await ecmascript-6
我正在使用Map来获取一些键/值对
let myMap = new Map()
myMap.set('foo', 'bar')
myMap.set('foo2', 'bar42')
Run Code Online (Sandbox Code Playgroud)
对于每个Map条目,我执行一个返回Promise的函数.所有这些Promise都可以使用并行执行Promise.all.
这就是我现在这样做的方式:
let mapPromises = []
myMap.forEach((value, key) => {
mapPromises.push(MyModel.forge({key, language, value}).save())
})
await Promise.all(mapPromises)
Run Code Online (Sandbox Code Playgroud)
是否有另一种(更短?,更快?)方法来实现这一点,而不是将所有函数调用推入数组然后触发Promise.all?
是的,使用forEach和手动推送到阵列几乎总是一个坏主意.
async function processEntry([key, value]) {
return MyModel.forge({key, value}).save();
}
(async function() {
let myMap = new Map()
myMap.set('foo', 'bar')
myMap.set('foo2', 'bar42')
const results = await Promise.all(Array.from(myMap, processEntry));
}());
Run Code Online (Sandbox Code Playgroud)
但是如果你想使用迭代器,你也可以做类似的事情
function* processEntries(map) {
for (const [key, value] of map)
yield MyModel.forge({key, value}).save();
}
(async function() {
let myMap = new Map()
myMap.set('foo', 'bar')
myMap.set('foo2', 'bar42')
const results = await Promise.all(processEntries(myMap));
}());
Run Code Online (Sandbox Code Playgroud)
我能想到的最简单的代码是
await Promise.all(Array.from(myMap, ([key, value]) =>
MyModel.forge({key, language, value}).save())
);
Run Code Online (Sandbox Code Playgroud)
请参阅Array#from文档
| 归档时间: |
|
| 查看次数: |
2092 次 |
| 最近记录: |