JavaScript Opérations asynchrones et boucle d'événements


Exemple

De nombreuses opérations intéressantes dans les environnements de programmation JavaScript courants sont asynchrones. Par exemple, dans le navigateur, nous voyons des choses comme

window.setTimeout(() => {
  console.log("this happens later");
}, 100);

et dans Node.js nous voyons des choses comme

fs.readFile("file.txt", (err, data) => {
  console.log("data");
});

Comment cela cadre-t-il avec la boucle d'événement?

Comment cela fonctionne-t-il lorsque ces instructions s'exécutent, elles indiquent à l' environnement hôte (à savoir le navigateur ou le runtime Node.js, respectivement) de se déclencher et de faire quelque chose, probablement dans un autre thread. Lorsque l’environnement hôte a terminé cette opération (respectivement, attendre 100 millisecondes ou lire le fichier file.txt ), il publiera une tâche dans la boucle d’événement, en disant "Appelez le rappel que j’ai reçu plus tôt avec ces arguments".

La boucle d'événements est alors occupée à faire son travail: rendre la page Web, écouter les entrées de l'utilisateur et rechercher en permanence les tâches publiées. Quand il verra ces tâches envoyées pour appeler les rappels, il rappellera en JavaScript. C'est comme ça que vous obtenez un comportement asynchrone!