Ordem de operações JS Firebase [duplicado]
Alguém pode me explicar porque o código abaixo executa primeiro o alerta "F", depois os ALERTAS "S 'e" V'.
var status = ' ';
database.ref('housekeeping/ongoing').once('value', function(snapshot){
alert(status + "S");
status = snapshot.val();
alert(status + "V");
});
alert(status + "F");
Respostas
once()é assíncrono e retorna imediatamente, antes que a consulta seja concluída. O retorno de chamada fornecido a ele será executado algum tempo depois.
Todas as APIs do Firebase são assíncronas e isso é muito comum em JavaScript. Você também deve saber que once()também retorna uma promessa, e essa promessa é a melhor maneira de lidar com os resultados de chamadas assíncronas. É muito importante na programação JavaScript moderna entender como funcionam as promessas.
Sugiro ler este blog sobre por que as APIs do Firebase são assíncronas .
Como você pode ver na documentação , onceé uma chamada assíncrona. Isso significa que o código continuará com tarefas síncronas até que os dados sejam recuperados. Em seguida, o código dentro de seu retorno de chamada será executado.
Para fazer com que os alertas 'S' e 'V' apareçam primeiro, você precisará fazer uso de async/await:
async function getDatabaseData() {
const snapshot = await database.ref('housekeeping/ongoing').once('value');
alert(status + "S");
status = snapshot.val();
alert(status + "V");
alert(status + "F");
}
Mais informações sobre async/await