使用Typescript中的数组迭代简化异步等待

使用Typescript中的数组迭代简化异步等待,typescript,promise,async-await,Typescript,Promise,Async Await,有没有一种更简单的方法可以在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); }); ES

有没有一种更简单的方法可以在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);
});

ES5数组方法不完全支持
async
和生成器函数,这就是为什么ES6中
for
和其他循环语句应该优先于
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=wait Promise.all(…)
还可以更轻松地管理项类型

如果应串联解决这些问题,且无需承诺所有问题,则这可以是for..of:

for (const item of items) {
    doSomething(item);
    const result = await doSomethingAsync(item);
    doSomethingMore(result, item);
});

不。为什么你认为它不够简单?如果你想同时做所有的承诺,你必须使用
承诺。所有的
我认为使用
.map
@DanielA.White只是一种仪式和开销,我不认为typescript有任何数组comprehensions@DanielA.White如果没有,你会用什么
map
创建承诺数组?