无法获取axios请求的返回值,请各位帮忙看看

function getNewToken(token){
  axios.get("someapi?token="+token).then(res =>{
    if (res.data.h.code === 200){
      let result = res.data;
      console.log("获取结果",result);  //在此得到了预期的结果
      return result;
    }
  });
}
let new_token = getNewToken("abc");
console.log("new_token",new_token);  //输出的结果是undefined

setTimeout(()=>{
    console.log("new_token",new_token);  //输出的结果仍然是undefined
},5000);

如上述问题,应该怎么解决?
谢谢。

阅读 16.8k
6 个回答

异步请求里用return是没有啥用的,定义全局变量result

let result = {};
function getNewToken(token){
  axios.get("someapi?token="+token).then(res =>{
    if (res.data.h.code === 200){
      result = res.data;
      console.log("获取结果",result);  //在此得到了预期的结果
    }
  });
}

异想天开了,异步的函数不能够返回,但是你可以使用回调函数

function getNewToken(token,callback){
  axios.get("someapi?token="+token).then(res =>{
    if (res.data.h.code === 200){
      let result = res.data;
      console.log("获取结果",result);  //在此得到了预期的结果
      typeof callback === 'function' && callback.call(window,result);
      return result;
    }
  });
}

// 调用

getNewToken("abc", data => {
    console.log("new_token",data );
});

你还可以使用es6的Promise对象 一样的道理

题主你的 getNewToken 函数没有返回值,自然 log 出来就是 undefined:

function noReturn(a) {
    a += 1
}
var b = noReturn(1)
console.log(b)
// => undefined

当然如果你修改了:

function getNewToken(token) {
  return axios.get("someapi?token="+token).then(res =>{
      // do wtf you want
  })
}

var promiseReturn = getNewToken('123')
console.log(promiseReturn)

这样只会得到一个 promise 的状态,并没有想要的答案。

你需要 handle promise,用好 promise,现有答案中 @小风哥 写的就是基本引用了。

function getNewToken(token){
 return axios.get("someapi?token="+token)
}
getNewToken('abc').then(res => {
    console.log(res)
    if (res.data.h.code === 200){
      let result = res.data;
      console.log("获取结果",result);  //在此得到了预期的结果
      typeof callback === 'function' && callback.call(window,result);
      return result;
    }
})

axios本身就是基于promise的,你在一个then 中return 一个result后,只会让下一个then接收到这个,而并不是让这个方法返回result,通常的做法是提交commit()存在state中。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题