gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 02:47:52 27 4
gpt4 key购买 nike

我在一个 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 | type assigned to.then()' 它获得了正确的数据,我可以控制台记录结果以确认它遵循预期的结构。但是编译器拒绝它并显示错误:

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 with Typescript 的文档非常少。如果有人能指出我正确的方向或告诉我我做错了什么,我将不胜感激。

最佳答案

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

关于javascript - 在 TypeScript 中从 Promise.all 返回正确的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64795096/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com