JavaScript Operazioni asincrone e loop eventi


Esempio

Molte operazioni interessanti in ambienti di programmazione JavaScript comuni sono asincrone. Ad esempio, nel browser vediamo cose come

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

e in Node.js vediamo cose simili

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

Come si inserisce questo evento nel ciclo degli eventi?

Il modo in cui funziona è che quando queste istruzioni vengono eseguite, dicono all'ambiente host (ad esempio, il browser o il runtime Node.js, rispettivamente) di andare fuori e fare qualcosa, probabilmente in un altro thread. Quando l'ambiente host è terminato facendo quella cosa (rispettivamente, aspettando 100 millisecondi o leggendo il file file.txt ), invierà un'attività al ciclo degli eventi, dicendo "chiama il callback che mi è stato dato prima con questi argomenti".

Il ciclo degli eventi è quindi occupato a fare la sua cosa: renderizzare la pagina web, ascoltare l'input dell'utente e cercare continuamente le attività postate. Quando vede queste attività postate richiamare i callback, richiama in JavaScript. Ecco come si ottiene il comportamento asincrono!