为了账号安全,请及时绑定邮箱和手机立即绑定

从 TypeScript 中的 Promise.all 返回正确的类型

从 TypeScript 中的 Promise.all 返回正确的类型

慕容708150 2023-07-29 15:33:11
我在一个 Promise.all() 语句中发出 2 个 API 请求,后跟一个 .then() 语句来操作数据以适应预期的结果类型。当我使用 async/await 单独启动 API 请求但使用 Promise.all 时,该函数会起作用,导致返回的数组为 void 类型。如何更改响应以推断正确的类型?这将返回正确的类型async function getUsers() {    const users = await axios.get<User[]>("serverURL/users");    const data = await axios.get<        Array<{ name: string; data: number }>    >("serverURL/data");    const userData = users.data.map(user => {        return {            //logic to manipulate userData        };    });    return userData;}Promise.all 版本返回类型 'void | 键入分配给.then()',它会获取正确的数据,我可以 console.log 结果以确认它遵循预期的结构。然而编译器拒绝它并出现错误:Type 'void | UserData[]' is not assignable to type 'UserData[]'.const getUsers = async () => {    return Promise        .all([            axios.get<User[]>("serverURL/users"),            axios.get<Array<{ name: string; data: number }>>("serverURL/data")        ])        .then <UserData[]>(res => {            const userData = res[0].map(user => {                return {                    //logic to manipulate userData                };            });            return userData;        })        .catch(console.error)}我尝试过使用promise.all<any>()我读过的各种其他技巧,但有关 Promise.all 和 Typescript 的文档非常稀疏。如果有人能指出我正确的方向或告诉我我做错了什么,我将不胜感激。
查看完整描述

1 回答

?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

问题是陷阱。当您捕获/处理承诺拒绝时,您不会返回任何内容/无效,从而导致承诺得以履行。console.error返回 void,但不会重新抛出。因此您的回报将返回一个UserData | void. 在捕获后抛出应该可以解决这个问题。



查看完整回答
反对 回复 2023-07-29
  • 1 回答
  • 0 关注
  • 135 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信