我的异步JavaScript在另一个函数的中间执行
我试图在Vue.js中的另一个函数之后执行一个函数。我已经尝试过异步/等待回调函数,.then,但它不想一个接一个地加载。什么是可能的解决方案 auth_mixin.js:我的异步JavaScript在另一个函数的中间执行,javascript,vue.js,asynchronous,promise,callback,Javascript,Vue.js,Asynchronous,Promise,Callback,我试图在Vue.js中的另一个函数之后执行一个函数。我已经尝试过异步/等待回调函数,.then,但它不想一个接一个地加载。什么是可能的解决方案 auth_mixin.js: async auth () { console.log("authban") var token = this.getCookie("token") var jsonData = {} jsonData["token"] = to
async auth () {
console.log("authban")
var token = this.getCookie("token")
var jsonData = {}
jsonData["token"] = token
console.log(jsonData)
var bodyFormData = new FormData();
bodyFormData.append('data', JSON.stringify(jsonData));
axios({
method: 'post',
url: 'backend/index.php?action=checkAuth',
data: bodyFormData,
headers: {'Content-Type': 'multipart/form-data'}
})
.then(function (response) {
console.log(response);
if(response.data.status==="OK"){
console.log("ok")
return true;
}else{
console.log("nem ok")
return false;
}
})
.catch(function (response) {
console.log(response);
return false;
});
}
Navbar.vue:
created () {
var result=false
this.auth().then(this.checkIfLoggedIn(result))
},
methods: {
checkIfLoggedIn (isLoggedIn) {
console.log("na ez lesz az erdekes "+isLoggedIn)
if(isLoggedIn === true){
console.log("true")
document.getElementById("logged_out").style.display="none";
document.getElementById("logged_in").style.display="block";
}else{
console.log("fail");
}
}
}
你有两个问题
首先:this.checkIfLoggedIn(结果)
立即调用checkIfLoggedIn
。您需要将函数传递给,然后
this.auth().then(() => this.checkIfLoggedIn(result))
第二:通过该更改,当auth
解析时,调用checkIfLoggedIn
那么auth
什么时候解析?好的,它是用async
关键字定义的,所以它在返回
时解析(除非它返回一个承诺,在这种情况下,它采用该承诺)
那么它的回报是什么呢?它没有return
语句,因此在调用axios
后立即返回undefined
(因为您没有等待它)
如果return
ed了axios(…).etc的返回值,则在该承诺得到解决之前,它不会得到解决
(旁白:您使用的是async
,您可能应该重构为使用wait
,尝试{}catch(){}
而不是。然后()
和.catch()
)。第一个明显的问题。。。问题,。然后
需要一个函数作为参数,其他任何东西都会被忽略(在本例中立即执行)-另一个问题,为什么要使用var result=false
并将result
传递给this.checkIfLoggedIn
而不仅仅是this.checkIfLoggedIn(false)
-因为这是你的代码唯一能通过的东西。非常感谢你,我现在完全明白了!
this.auth().then(() => this.checkIfLoggedIn(result))