Como fazer axios síncrona
Estou usando o axios para verificar se um alias ainda não foi usado por outro no banco de dados.
Problema: A chamada ajax não espera pela resposta do servidor para executar o código restante.
O código se parece com:
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;
});
},
},
}
O console mostra o seguinte resultado:1. before checking
3. checked valid, can save now
2. server response:false
Não consigo mover o código dosave()
método em.then
porque faço outras validações nos dados de entrada, como caracteres alfanuméricos, mínimo de caracteres ...
Consegui adiar a terceira parte (if (this.valid) {
) usando setsetTimeout
mas não é a melhor solução. e se o servidor demorar mais ou menos que o tempo de espera definido ..
Pergunta, questão Existe uma maneira de tornar essa chamada seqüencial (1, 2, 3) em vez de (1, 3, 2)?