【发布时间】:2017-03-01 14:39:28
【问题描述】:
给定以下代码:
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 一起工作?
【问题讨论】:
-
你为什么要把同步操作变成异步操作?
arr.map()是同步的,不返回承诺。 -
您不能将异步操作发送到一个函数,例如
map,它需要一个同步操作,并期望它能够工作。 -
@jfriend00 我在内部函数中有很多等待语句。它实际上是一个很长的函数,我只是简化了它以使其可读。我现在添加了一个等待调用,以更清楚地说明为什么它应该是异步的。
-
你需要等待返回承诺的东西,而不是返回数组的东西。
-
要意识到的一件有用的事情是,每次将函数标记为
async时,都会使该函数返回一个承诺。所以当然,async 的映射会返回一组 promise :)
标签: javascript typescript promise async-await ecmascript-2017