为了账号安全,请及时绑定邮箱和手机立即绑定

返回嵌套承诺但未找到响应

返回嵌套承诺但未找到响应

catspeake 2022-09-29 10:41:54
我在这里读了很多问题,但仍然找不到答案。这可能意味着我问了错误的问题,但无论如何,这里都是如此。我正在尝试在 Vue 中构建我的第一个应用.js使用 REST api 后端,该后端将使用 JWT 令牌进行身份验证。我正在构建在底部的图层,这些图层将使用公理来发出 ajax 请求。上面的层处理身份验证,JWT令牌,超时等然后我就喜欢上了 Vue 的服务、商店和组件所以我的问题是我如何构建这些层,以便在身份验证错误时,我可以拦截需要登录刷新的401返回,并将承诺传递回链。我在这里读到,我不应该创造回报新的承诺,而应该回报原来的承诺。我看到的是,来自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.rejectasync 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 jsgetMails().then( function(response){    console.log('back from getMails with:'+response);    //let mails = response;    //console.log('mails: '+mails);})请参见 JS小提琴: https://jsfiddle.net/chrisby/y6eocrm0/
查看完整描述

1 回答

?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

多亏了拉贾贾加纳坦邦,我错过了等待公理().then行的返回,所以完整的工作代码在下面。我还更新了上面的JS小提琴。

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);

})


查看完整回答
反对 回复 2022-09-29
  • 1 回答
  • 0 关注
  • 79 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信