【发布时间】:2020-04-23 20:31:54
【问题描述】:
我有一点类似的问题like this,但我似乎无法正确解决。我知道我必须向return 作出承诺,我想我会这样做,尽管它仍未被接受。这是我的 axios 调用的包装函数:
export const callGraph = (url, token) => {
return axios.get(url, {headers: { Authorization: `Bearer ${token}` }})
}
这是调用callGraph 的函数,而Promise 又应该返回一个Promise:
export const getGraphProfile = () => {
if (auth.getAccount()) {
auth.getToken(loginRequest)
.then(response => {
return callGraph(graphConfig.graphMeUrl, response.accessToken)
})
.catch(error => { console.log(error) })
}
}
如您所见,我明确请求return callGraph,所以我可以像这样使用它:
getGraphProfile()
.then(response => { console.log('givenName ', response.data.givenName) })
.catch(error => console.log(error))
出于某种原因,我仍然缺少一些东西。谢谢您的帮助。
【问题讨论】:
-
您没有从外部函数返回任何内容 (
getGraphProfile)。返回auth.getToken调用的结果。在auth.getAccount返回false的情况下,注意你会返回undefined,你会破坏调用者。您可以返回一个被拒绝的承诺来涵盖该案例。但我认为使用 async / await 会更干净。 -
你能举例说明如何使用
rejected承诺吗?那只是new Promise((reject) => {reject('my error')})在.catch部分吗? -
要创建一个被拒绝的承诺,您可以使用帮助器:
Promise.reject('reason')。但是我想问一下,当auth.getAccount()返回 false 时,getGraphProfile函数的预期行为是什么?它应该“错误”吗?它应该返回一些“默认*值”吗? -
它应该返回来自
auth.getToken()的错误。然后调用getGraphProfile的调用者仍然可以决定在catch 子句中做什么。 Thx for that oneliner,非常方便。 -
如果
auth.getAccount返回 false,则不会调用auth.getToken,因为它不会输入 if。我错过了什么吗?
标签: javascript promise