对Array.map使用异步等待
给出以下代码:
var arr = [1,2,3,4,5];var results: number[] = await arr.map(async (item): Promise<number> => {
await callAsynchronousOperation(item);
return item + 1;
});
产生以下错误:
TS2322:类型’Promise
[]’无法分配给类型’number []’。类型’Promise
不可分配给类型’number’。
我该如何解决?怎样才能让async await
和Array.map
一起工作?
回答:
这里的问题是,您正在尝试await
兑现承诺而不是承诺。这没有达到您的期望。
当传递给的对象await
不是Promise时,await
只需立即按原样返回值,而不是尝试解析它。因此,由于您await
在此处传递了(Promise对象的)数组而不是Promise,所以await返回的值就是该数组,其类型为Promise<number>[]
。
您需要在此处调用Promise.all
返回的数组map
,以便在使用前将其转换为单个Promise await
。
根据MDN文档Promise.all
:
该
Promise.all(iterable)
方法返回一个promise,当可迭代参数中的所有promise都已解决时,该promise会解决;或者以第一个传递的promise拒绝为由拒绝。
因此,在您的情况下:
var arr = [1, 2, 3, 4, 5];var results: number[] = await Promise.all(arr.map(async (item): Promise<number> => {
await callAsynchronousOperation(item);
return item + 1;
}));
这将解决您在此处遇到的特定错误。
以上是 对Array.map使用异步等待 的全部内容, 来源链接: utcz.com/qa/409237.html