In primo luogo, mi rendo conto di essere in ritardo nel rispondere a questa domanda.
Prima di discutere sincrono e asincrono, esaminiamo brevemente come vengono eseguiti i programmi.
Nel caso sincrono, ogni istruzione completa prima della successiva istruzione viene eseguita. In questo caso il programma viene valutato esattamente in base alle istruzioni.
Questo è il modo in cui asincrono funziona in JavaScript. Ci sono due parti nel motore JavaScript, una parte che esamina le operazioni di codice e accodamento e un'altra che elabora la coda. L'elaborazione della coda avviene in un thread, ecco perché può accadere una sola operazione alla volta.
Quando viene visualizzata un'operazione asincrona (come la seconda query del database), il codice viene analizzato e l'operazione viene inserita nella coda, ma in questo caso viene registrata una richiamata da eseguire al termine dell'operazione. La coda potrebbe già avere molte operazioni. L'operazione nella parte anteriore della coda viene elaborata e rimossa dalla coda. Una volta che l'operazione per la query del database viene elaborata, la richiesta viene inviata al database e al termine verrà eseguita la richiamata al completamento. A questo punto, il processore coda di aver "gestito" L'operazione si sposta sulla successiva operazione - in questo caso
console.log("Hello World");
La query database è ancora in fase di elaborazione, ma l'operazione console.log è nella parte anteriore della coda e viene elaborato. Trattandosi di un'operazione sincrona viene immediatamente eseguita con conseguente risultato nell'output "Hello World". Qualche tempo dopo, l'operazione di database viene completata, solo allora il callback registrato con la query viene richiamato ed elaborato, impostando il valore del risultato della variabile su righe.
È possibile che un'operazione asincrona risulti in un'altra operazione asincrona, questa seconda operazione verrà inserita nella coda e quando verrà visualizzata la parte anteriore della coda verrà elaborata. La chiamata al callback registrato con un'operazione asincrona è il modo in cui JavaScript run time restituisce il risultato dell'operazione quando viene eseguita.
Un semplice metodo per sapere quale operazione JavaScript è asincrona è notare se richiede una richiamata - il callback è il codice che verrà eseguito quando la prima operazione è completa. Nei due esempi nella domanda, possiamo vedere solo il secondo caso ha un callback, quindi è l'operazione asincrona dei due. Non è sempre il caso a causa dei diversi stili di gestione del risultato di un'operazione asincrona.
Per ulteriori informazioni, leggi le promesse. Le promesse sono un altro modo in cui è possibile gestire il risultato di un'operazione asincrona. La cosa bella delle promesse è che lo stile di codifica è più simile al codice sincrono.
Molte librerie come il nodo 'fs', forniscono sia stili sincroni che asincroni per alcune operazioni. Nei casi in cui l'operazione non richiede molto tempo e non viene utilizzata molto - come nel caso della lettura di un file di configurazione - l'operazione in stile sincrono produrrà un codice che è più facile da leggere.
Stange non hai trovato nulla con google, è un argomento piuttosto grande. Nella programmazione sincrona, ciascun passo viene eseguito uno dopo che l'esecuzione precedente è terminata. In modo asincrono, il passaggio 2 verrà eseguito anche se il passaggio 1 non è terminato. La funzione che vedi definita nel tuo secondo esempio è chiamata funzione callBack e verrà eseguita non appena verrà restituito il risultato dal database, che probabilmente avverrà dopo l'esecuzione di console.log. –
@Bartdude C'era molto sulla programmazione asincrona, ma nessuna spiegazione un po 'semplice su cosa sia e cosa significhi nella pratica. – Azeirah
Evitare le funzioni sincrone, anche durante l'inizializzazione e lo spegnimento –