使用Typescript中的数组迭代简化异步等待
有没有一种更简单的方法可以在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
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
创建承诺数组?