首页 >web前端 >js教程 >在 Array.map 中使用 Async/Await 时,如何解决'类型'Promise[]'不可分配给类型'number[]'”?

在 Array.map 中使用 Async/Await 时,如何解决'类型'Promise[]'不可分配给类型'number[]'”?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-11 01:04:09916浏览

How to Resolve

在 Array.map 中使用 Async/Await

尝试在 Array.map 中使用 async/await 时,用户经常会遇到类似的错误以下内容:

“输入 'Promise[]' 不是可分配给类型“number[]”,类型“Promise”。无法分配给类型“number”。”

出现此错误是因为等待函数必须解析 Promise。但是,Array.map 通常返回 Promise 数组,而不是单个 Promise。

解决方案

要解决此问题,请转换 Array 返回的 Promise 数组。使用 Promise.all 映射到单个 Promise。仅当其可迭代参数中的所有 Promise 都已解决时,Promise.all 才会解析。

这是有问题代码的修改版本:

const arr = [1, 2, 3, 4, 5];
const results: number[] = await Promise.all(arr.map(async (item): Promise<number> => {
    await callAsynchronousOperation(item);
    return item + 1;
}));

通过利用 Promise.all,Promise 数组被解析为单个 Promise,允许 wait 正确运行,消除“Type 'Promise[]' 不可分配”输入“number[]”错误。

其他选项

根据具体用例,考虑使用 Promise.allSettled、Promise.any 或 Promise。 race 而不是 Promise.all。然而,在上述情况下,Promise.all 通常是最合适的选择。

以上是在 Array.map 中使用 Async/Await 时,如何解决'类型'Promise[]'不可分配给类型'number[]'”?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn