Premièrement, je me rends compte que je suis en retard pour répondre à cette question.
Avant de parler de synchrone et asynchrone, examinons brièvement le fonctionnement des programmes.
Dans le cas synchrone , chaque instruction se termine avant l'exécution de l'instruction suivante. Dans ce cas, le programme est évalué exactement dans l'ordre des instructions.
C'est ainsi que fonctionne l' asynchrone en JavaScript. Le moteur JavaScript comprend deux parties, une partie qui examine le code et met en file d'attente les opérations et une autre qui traite la file d'attente. Le traitement de la file d'attente se produit dans un thread, c'est pourquoi une seule opération peut se produire à la fois.
Lorsqu'une opération asynchrone (comme la deuxième requête de base de données) est vue, le code est analysé et l'opération est placée dans la file d'attente, mais dans ce cas, un rappel est enregistré pour être exécuté lorsque cette opération se termine. La file d'attente peut déjà contenir de nombreuses opérations. L'opération au début de la file d'attente est traitée et supprimée de la file d'attente. Une fois l'opération pour la requête de base de données traitée, la demande est envoyée à la base de données et une fois terminée, le rappel sera exécuté à la fin. A ce moment, le processeur de file d'attente ayant "traité" l'opération passe à l'opération suivante - dans ce cas
console.log("Hello World");
La requête de base de données est toujours en cours de traitement, mais l'opération console.log est au début de la file d'attente et est traitée. Ceci étant une opération synchrone est exécutée immédiatement résultant immédiatement en la sortie «Hello World». Quelque temps plus tard, l'opération de base de données se termine, alors seulement le rappel enregistré avec la requête est appelé et traité, en définissant la valeur de la variable result en lignes.
Il est possible qu'une opération asynchrone aboutisse à une autre opération asynchrone, cette seconde opération sera mise dans la file d'attente et lorsqu'elle arrivera au début de la file d'attente, elle sera traitée. L'appel du rappel enregistré avec une opération asynchrone permet à l'exécution de JavaScript de renvoyer le résultat de l'opération lorsqu'elle est terminée.
Une méthode simple pour savoir quelle opération JavaScript est asynchrone consiste à noter si elle nécessite un rappel - le rappel est le code qui sera exécuté lorsque la première opération est terminée. Dans les deux exemples de la question, nous pouvons voir que seul le deuxième cas a un rappel, il s'agit donc de l'opération asynchrone des deux. Ce n'est pas toujours le cas en raison des différents styles de gestion du résultat d'une opération asynchrone.
Pour en savoir plus, lisez les promesses. Les promesses sont une autre façon de gérer le résultat d'une opération asynchrone. La bonne chose à propos des promesses est que le style de codage ressemble plus à du code synchrone.
De nombreuses bibliothèques telles que node 'fs' fournissent des styles synchrones et asynchrones pour certaines opérations. Dans les cas où l'opération ne prend pas longtemps et n'est pas beaucoup utilisée - comme dans le cas de la lecture d'un fichier de configuration - l'opération de style synchrone aboutira à un code plus facile à lire.