I'm using axios to check if an alias has not already been used by another in the database.
Problem:
The ajax call doesn't wait for the server response to execute the remaining code.
The code looks like :
export default {
data () {
return {
id: null,
alias: null,
valid: true,
}
},
methods: {
// triggered by the save button
save () {
this.valid = true;
console.log('before checking');
this.checkUniqueness();
// other validations here
if (this.valid) {
console.log('3. checked valid, can save now');
// save now
}
},
checkUniqueness () {
axios.get('/api/unique/alias', {
params: {
id: this.id,
alias: this.alias,
}
})
.then((response) => {
console.log('2. server response:' + response.data.unique)
this.valid = response.data.unique;
});
},
},
}
The console shows the following result:
1. before checking
3. checked valid, can save now
2. server response:false
I cannot move the code of the save()
method into .then
because I do other validations on the input data such as alpha-numeric characters, minimum of characters...
I was able to delay the 3rd part (if (this.valid) {
) using set setTimeout
but it's not the best solution. what if the server takes more or less than the defined waiting time..
Question Is there a way to make this call sequential (1, 2, 3) instead of (1, 3, 2)?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…