我有一个函数,它向api发出get请求
const get = async (endpoint: string): Promise<object> => {
const response: Response = await fetch(`${process.env.PROXY}/${endpoint}`, {
method: "GET",
});
return {data: response.json() as object};
};
当我在按钮onclick处理程序上使用此函数时
onClick={() => {
get(
`apiroute`
).then((data: object) => {
console.log("Retuned data", data.data);
});
}}
控制台显示的是承诺,而不是实际数据
但是当我将get函数切换到
const get = async (endpoint: string): Promise<object> => {
const response: Response = await fetch(`${process.env.PROXY}/${endpoint}`, {
method: "GET",
});
return response.json() as object
};
如果不返回数据周围的对象,则通过
onClick={() => {
get(
`apiroute`
).then((data: object) => {
console.log("Retuned data", data);
});
}}
控制台打印出实际数据。为什么会发生这种情况?我更喜欢用第一种方法,为它添加一个提取键 error
但是这个日志问题真的让我很恼火
1条答案
按热度按时间8xiog9wr1#
首先:
记住
response.json()
它本身就是一种承诺。你是说
return {data: <Promise>}
.第二种方法之所以有效,是因为您直接在异步函数中返回承诺,
当您从异步函数返回承诺时,
get().then(...
像正常情况一样解决承诺,因此您可以获得预期的正确数据。如果你想走第一条路,
await
它首先: