【发布时间】:2020-04-30 12:33:30
【问题描述】:
我想这很简单,但我在获得正确响应时遇到了一些麻烦。我的代码返回的是 promise 对象,而不是值。
我的 axios 调用是这样的:
export const myFunc = async (hash: string) => {
return axios.get(`${url}/${path}?hash=hash`)
.then((response: any) => {
console.log('my response: ', response.data) // {key: value} as expected
return response.data
})
}
我从另一个文件中调用它
const xy = async (c: string) => {
return myFunc(c)
}
console.log('result of xy(): ' xy('some hash')) // result of xy(): { Promise <pending> } <--- ????
如果我 .toString() 它,因为我很生气(我想我有一些理由为什么在某一时刻但我不记得那是什么),我得到 p>
result of xy(): [object Promise]
我用谷歌搜索过,我的堆栈溢出了,现在我要问这个问题,因为到目前为止我发现的东西并不完全有效。
感谢您的帮助
【问题讨论】:
-
JavaScript 是一种高度异步的语言。处理异步操作有不同的方法,比如早期流行(并且仍然存在)和现在的回调,Promises。
-
我正在使用上面的异步函数,当我添加等待时(
return await axios.get...或return await myFunc...我得到相同的结果。我可以尝试显式的承诺语法,但我们希望移动从那到整个代码中的异步等待。@EmileBergeron -
你无法摆脱 Promise,
async/awaitis just syntactic sugar on top of Promises。在某些时候,你将不得不处理 JS 的异步特性,所以你最好今天就学习它;)
标签: javascript reactjs typescript axios