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

请教各位一个问题,求解答:调用axios请求后台的函数时,如何使请求完成再继续往下执行?

请教各位一个问题,求解答:调用axios请求后台的函数时,如何使请求完成再继续往下执行?

开满天机 2019-08-21 18:37:44
问题描述axios请求后台封装在一个函数中,用其他函数调用时,因为是异步操作所以总是未执行完后台请求就直接往下执行了,导致取不到正确的数据,请教各位前辈如何解决。vue小白一个,不胜感激。问题出现的环境背景及自己尝试过哪些方法尝试使用aysnc和await,如下所示,还是没有成功相关代码//请把代码文本粘贴到下方(请勿用图片代替代码)aysnccheckLogin(){if(localStorage.getItem("access_token")){//访问后台查看access_token是否合法varpostData=qs.stringify({'access_token':localStorage.getItem("access_token"),'refresh_token':localStorage.getItem("refresh_token"),'username':localStorage.getItem("username")})axios({method:'POST',url:globalVar.remoteUrl+'/LoginCheck',data:postData,responseType:'json',headers:{"Content-Type":'application/x-www-form-urlencoded'}}).then((response)=>{if(response.data.code===200){//允许访问this.$toast.success('访问成功')}elseif(response.data.code===201){//access_token过期,refresh_token未过期this.$toast.success('重新生成access_token,且访问成功')}elseif(response.data.code===404){//access_token与refresh_token均过期this.$toast.error("登录信息过期,请重新登录")console.log('111')}})}else{this.$toast.error("请先登录")}},asyncLogin(){awaitthis.checkLogin();console.log('222')},你期待的结果是什么?实际看到的错误信息又是什么?我想是先执行console.log('111')后执行console.log(222)结果总是反的
查看完整描述

2 回答

?
智慧大石

TA贡献1946条经验 获得超3个赞

你在好好看看async/await咋用的。。改了一下
checkLogin(){
if(!localStorage.getItem("access_token")){
returnPromise.reject();
}
//访问后台查看access_token是否合法
varpostData=qs.stringify({
access_token:localStorage.getItem("access_token"),
refresh_token:localStorage.getItem("refresh_token"),
username:localStorage.getItem("username")
});
returnaxios({
method:"POST",
url:globalVar.remoteUrl+"/LoginCheck",
data:postData,
responseType:"json",
headers:{"Content-Type":"application/x-www-form-urlencoded"}
});
},
asyncLogin(){
letresponse=awaitthis.checkLogin().catch(err=>{
this.$toast.error("请先登录");
});
if(response&&response.data.code===200){
//允许访问
this.$toast.success("访问成功");
}elseif(response&&response.data.code===201){
//access_token过期,refresh_token未过期
this.$toast.success("重新生成access_token,且访问成功");
}elseif(response&&response.data.code===404){
//access_token与refresh_token均过期
this.$toast.error("登录信息过期,请重新登录");
console.log("111");
}
console.log("222");
}
                            
查看完整回答
反对 回复 2019-08-21
?
慕娘9325324

TA贡献1783条经验 获得超4个赞

用co方便点:
co(function*(){
letres=yieldaxios(...)
console.log(res.data)
console.log(222);
});
                            
查看完整回答
反对 回复 2019-08-21
  • 2 回答
  • 0 关注
  • 1026 浏览
慕课专栏
更多

添加回答

举报

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