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

发布于 2022-09-06 05:23:23 字数 463 浏览 17 评论 0

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

撑一把青伞 2022-09-13 05:23:23

异步请求里用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);  //在此得到了预期的结果
    }
  });
}
勿忘心安 2022-09-13 05:23:23

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

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对象 一样的道理

紫南 2022-09-13 05:23:23

题主你的 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,现有答案中 @小风哥 写的就是基本引用了。

︶葆Ⅱㄣ 2022-09-13 05:23:23
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;
    }
})
猫弦 2022-09-13 05:23:23

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

对你的占有欲 2022-09-13 05:23:23

搞清楚什么是 异步 再来问

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文