有没有更简单的方法在Typescript中表达这种语法,没有Promise.all
和Array.prototype.map
?
const items = [...];
await Promise.all(items.map(async item => {
doSomething(item);
const result = await doSomethingAsync(item);
doSomethingMore(result, item);
});
答案 0 :(得分:3)
ES5数组方法不完全支持async
和生成器函数,这就是为什么for
和其他循环语句应优先于ES6中forEach
的原因之一。
在这种情况下,map
部分被滥用,因为它不管理数组值。如果应该同时解决承诺,那么可能应该是:
items = await Promise.all(items.map(async item => {
doSomething(item);
const result = await doSomethingAsync(item);
doSomethingMore(result, item);
return item;
});
不太简单但可能在语义上正确。如果do..
函数将item
修改为其类型更改的点,const newItems = await Promise.all(...)
也可以更轻松地管理项类型。
如果应该系列地解决它们并且不必涉及Promise.all
,则可以for..of
:
for (const item of items) {
doSomething(item);
const result = await doSomethingAsync(item);
doSomethingMore(result, item);
});