鍍金池/ 問(wèn)答/Java  HTML/ 無(wú)法獲取axios請(qǐng)求的返回值,請(qǐng)各位幫忙看看

無(wú)法獲取axios請(qǐng)求的返回值,請(qǐng)各位幫忙看看

function getNewToken(token){
  axios.get("someapi?token="+token).then(res =>{
    if (res.data.h.code === 200){
      let result = res.data;
      console.log("獲取結(jié)果",result);  //在此得到了預(yù)期的結(jié)果
      return result;
    }
  });
}
let new_token = getNewToken("abc");
console.log("new_token",new_token);  //輸出的結(jié)果是undefined

setTimeout(()=>{
    console.log("new_token",new_token);  //輸出的結(jié)果仍然是undefined
},5000);

如上述問(wèn)題,應(yīng)該怎么解決?
謝謝。

回答
編輯回答
愛(ài)礙唉

axios本身就是基于promise的,你在一個(gè)then 中return 一個(gè)result后,只會(huì)讓下一個(gè)then接收到這個(gè),而并不是讓這個(gè)方法返回result,通常的做法是提交commit()存在state中。

2017年9月5日 05:39
編輯回答
款爺

異想天開(kāi)了,異步的函數(shù)不能夠返回,但是你可以使用回調(diào)函數(shù)

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

// 調(diào)用

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

你還可以使用es6的Promise對(duì)象 一樣的道理

2017年4月21日 16:31
編輯回答
陪她鬧

異步請(qǐng)求里用return是沒(méi)有啥用的,定義全局變量result

let result = {};
function getNewToken(token){
  axios.get("someapi?token="+token).then(res =>{
    if (res.data.h.code === 200){
      result = res.data;
      console.log("獲取結(jié)果",result);  //在此得到了預(yù)期的結(jié)果
    }
  });
}
2018年7月8日 01:45
編輯回答
獨(dú)白

搞清楚什么是 異步 再來(lái)問(wèn)

2018年1月5日 10:14
編輯回答
久愛(ài)她

題主你的 getNewToken 函數(shù)沒(méi)有返回值,自然 log 出來(lái)就是 undefined:

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

當(dāng)然如果你修改了:

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

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

這樣只會(huì)得到一個(gè) promise 的狀態(tài),并沒(méi)有想要的答案。

你需要 handle promise,用好 promise,現(xiàn)有答案中 @小風(fēng)哥 寫的就是基本引用了。

2017年11月3日 08:57
編輯回答
野橘
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("獲取結(jié)果",result);  //在此得到了預(yù)期的結(jié)果
      typeof callback === 'function' && callback.call(window,result);
      return result;
    }
})
2017年1月30日 10:53