返回嵌套承诺但未找到响应
Posted
技术标签:
【中文标题】返回嵌套承诺但未找到响应【英文标题】:Returning nested promise but not finding response 【发布时间】:2020-09-30 04:16:04 【问题描述】:我在这里阅读了很多问题,但仍然无法找到答案。这可能意味着我问错了问题,但不管怎样。
我正在尝试使用 REST api 后端在 Vue.js 中构建我的第一个应用程序,该后端将使用 JWT 令牌进行身份验证。
我正在构建将在底部使用 axios 发出 ajax 请求的层。
上面的层处理身份验证、JWT 令牌、超时等
然后我进入 Vue 的服务、商店和组件
所以我的问题是我如何构建这些层,以便在身份验证错误时我可以拦截需要登录刷新的 401 返回,将承诺传递回链。
我读到 here 我不应该创建返回新的承诺,而应该返回原来的承诺。
我看到的是 getMails 的返回结果未定义。
这是我的代码:
async function axios() // emulate axios returning a promise
return new Promise((resolve, reject) =>
resolve('return from axios');
)
// authentication layer. check for 401 and use Promise.reject
async function api()
await axios().then(
response =>
// if ( response.status==401 )
// Promise.reject(response.status)
console.log('api then: '+response)
return Promise.resolve(response+'~return from api');
)
// services layer builds query params etc...
async function getMails()
return await api();
// vuex store to handle emails
// here just run js
getMails().then( function(response)
console.log('back from getMails with:'+response);
//let mails = response;
//console.log('mails: '+mails);
)
见 JSFiddle:https://jsfiddle.net/chrisby/y6eocrm0/
【问题讨论】:
这是您所期待的 - jsfiddle.net/n4b8hqsc/1 吗? api 函数缺少返回关键字, 非常好 - 谢谢!你想把它作为答案吗? 【参考方案1】:感谢Raja Jaganathan,我错过了 await axios().then 行的返回,因此完整的工作代码如下。我还更新了上面的 JSFiddle。
async function axios() // emulate axios returning a promise
return new Promise((resolve, reject) =>
resolve('return from axios');
)
// authentication layer. check for 401 and use Promise.reject
async function api()
return axios().then(
response =>
// if ( response.status==401 )
// Promise.reject(response.status)
console.log('api then: '+response)
return Promise.resolve(response+'~return from api');
)
// services layer builds query params etc...
async function getMails()
return api();
// vuex store to handle emails
// here just run js
getMails().then( function(response)
console.log('back from getMails with:'+response);
let mails = response;
console.log('mails: '+mails);
)
【讨论】:
以上是关于返回嵌套承诺但未找到响应的主要内容,如果未能解决你的问题,请参考以下文章