这里的问题是,你试图得到一系列的承诺,而不是一个承诺。这不会达到您的预期。await
当传递给的对象不是 Promise 时,只需立即按原样返回值,而不是尝试解析它。因此,由于您在此处传递了一个数组(Promise对象)而不是Promise,因此 await 返回的值只是该数组,其类型为 。await
await
await
Promise<number>[]
您可能想做的是调用 返回的数组,以便在它之前将其转换为单个 Promise。Promise.all
map
await
根据 Promise.all
的 MDN 文档:
该方法返回一个承诺,当可迭代参数中的所有承诺都已解决时,该承诺将解决,或者以拒绝的第一个传递的承诺为由拒绝。Promise.all(iterable)
因此,在您的情况下:
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;
}));
这将解决您在此处遇到的特定错误。
根据您要尝试的确切内容,您也可以考虑使用Promise.allSettled
,Promise.any
或Promise.race
而不是,尽管在大多数情况下(几乎肯定包括这个)将是您想要的那个。Promise.all
Promise.all