使用Typescript中的数组迭代简化async-await

时间:2018-05-16 18:21:17

标签: typescript promise async-await

有没有更简单的方法在Typescript中表达这种语法,没有Promise.allArray.prototype.map

const items = [...];
await Promise.all(items.map(async item => {
    doSomething(item);
    const result = await doSomethingAsync(item);
    doSomethingMore(result, item);
});

1 个答案:

答案 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);
});