Ordre des opérations JS Firebase [duplicate]

Aug 28 2020

Quelqu'un peut-il m'expliquer pourquoi le code ci-dessous exécute d'abord l'alerte "F", puis les ALERTES "S 'et" V'.

var status = ' ';
  database.ref('housekeeping/ongoing').once('value', function(snapshot){
    alert(status + "S");
    status = snapshot.val();
    alert(status + "V");
  });
  alert(status + "F");

Réponses

1 DougStevenson Aug 28 2020 at 00:23

once()est asynchrone et retourne immédiatement, avant que la requête ne soit terminée. Le rappel que vous lui fournissez sera exécuté quelque temps plus tard.

Toutes les API Firebase sont asynchrones, ce qui est très courant en JavaScript. Vous devez également savoir que once()renvoie également une promesse, et que cette promesse est un meilleur moyen de gérer les résultats des appels asynchrones. Il est très important dans la programmation JavaScript moderne de comprendre comment fonctionnent les promesses.

Je suggère de lire ce blog sur les raisons pour lesquelles les API Firebase sont asynchrones .

1 Titulum Aug 28 2020 at 00:26

Comme vous pouvez le voir dans la documentation , il onces'agit d'un appel asynchrone. Cela signifie que le code continuera avec des tâches synchrones jusqu'à ce que les données aient été récupérées. Ensuite, le code dans votre rappel sera exécuté.

Pour que les alertes «S» et «V» apparaissent en premier, vous devrez utiliser 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");
}

Plus d'informations sur async/await