我正在尝试使其能够从第一个axios调用中查看返回的对象,如果为空,请继续执行第二个操作(如果不为空,我将制作一条错误消息)
基本上,仅当userStatus对象为空时,才应进行第二次axios调用。这两个axios调用都是独立工作的,但是如果对象为空,我如何才能正确地执行此工作,以便我可以打第二个调用?
当前,我在第一个axios调用上得到200,在控制台中有一个空的userStatus对象,但是第二个调用没有发生
changeStatus: function(event) {
let user = this.auth_user;
axios.get('/user/' + user + '/status')
.then((response) => {
this.userStatus = response.data
})
if(this.userStatus.length < 1){
let data = {
id: event.id,
status: 'A'
};
axios.post('/status/change',data)
.then((response) => {
if (response.data.success == false) {
this.errors = [];
const errorLog = Object.entries(response.data.errors);
for (var i = errorLog.length - 1; i >= 0; i--) {
console.log(errorLog[i][1][0]);
this.errors.push(errorLog[i][1][0]);
}
}
})
}else{
console.dir('No');
}
},
答案 0 :(得分:5)
问题是您的代码是同步执行 (基本上是逐行执行),而axios调用是 a 同步。因此,当您的第一个axios调用仍在后台执行时,语句if(this.userStatus.length < 1)
会得到评估-在您的第一个调用返回之前。
如果您的第二个通话以您的第一个通话的结果为条件,则您需要在您的第一个通话的.then()
处理程序 内部 致电:
changeStatus: function(event) {
let user = this.auth_user;
axios.get('/user/' + user + '/status')
.then((response) => {
this.userStatus = response.data;
if(this.userStatus.length < 1) {
let data = {
id: event.id,
status: 'A'
};
axios.post('/status/change',data)
.then((response) => {
if (response.data.success == false) {
this.errors = [];
const errorLog = Object.entries(response.data.errors);
for (var i = errorLog.length - 1; i >= 0; i--) {
console.log(errorLog[i][1][0]);
this.errors.push(errorLog[i][1][0]);
}
}
});
} else {
console.dir('No');
}
});
},