Zuerst stelle ich fest, dass ich diese Frage zu spät beantworte.
Bevor wir uns mit synchron und asynchron befassen, wollen wir uns kurz ansehen, wie Programme ausgeführt werden.
Im synchronen Fall wird jede Anweisung abgeschlossen, bevor die nächste Anweisung ausgeführt wird. In diesem Fall wird das Programm genau in der Reihenfolge der Anweisungen ausgewertet.
So funktioniert Asynchron in JavaScript. Die JavaScript-Engine besteht aus zwei Teilen, einem Teil, der sich mit den Code- und Warteschlangenoperationen befasst, und einem anderen Teil, der die Warteschlange verarbeitet. Die Warteschlangenverarbeitung erfolgt in einem Thread. Daher kann jeweils nur eine Operation ausgeführt werden.
Wenn eine asynchrone Operation (wie die zweite Datenbankabfrage) angezeigt wird, wird der Code analysiert und die Operation in die Warteschlange gestellt. In diesem Fall wird jedoch ein Rückruf registriert, der ausgeführt werden soll, wenn diese Operation abgeschlossen ist. Die Warteschlange enthält möglicherweise bereits viele Vorgänge. Der Vorgang an der Vorderseite der Warteschlange wird verarbeitet und aus der Warteschlange entfernt. Sobald der Vorgang für die Datenbankabfrage verarbeitet wurde, wird die Anforderung an die Datenbank gesendet, und wenn der Rückruf abgeschlossen ist, wird er nach Abschluss ausgeführt. Zu diesem Zeitpunkt bewegt sich der Warteschlangenprozessor, der die Operation "behandelt" hat, zur nächsten Operation - in diesem Fall
console.log("Hello World");
Die Datenbankabfrage wird noch verarbeitet, aber die Operation console.log befindet sich vorne in der Warteschlange und wird verarbeitet. Dies ist eine synchrone Operation, die sofort ausgeführt wird und sofort zur Ausgabe "Hello World" führt. Einige Zeit später wird der Datenbankvorgang abgeschlossen. Erst dann wird der bei der Abfrage registrierte Rückruf aufgerufen und verarbeitet, wobei der Wert des Variablenergebnisses auf Zeilen gesetzt wird.
Es ist möglich, dass eine asynchrone Operation zu einer anderen asynchronen Operation führt. Diese zweite Operation wird in die Warteschlange gestellt und an der Vorderseite der Warteschlange verarbeitet. Durch Aufrufen des bei einer asynchronen Operation registrierten Rückrufs gibt die JavaScript-Laufzeit das Ergebnis der Operation zurück, wenn sie abgeschlossen ist.
Eine einfache Methode, um zu wissen, welche JavaScript-Operation asynchron ist, besteht darin, festzustellen, ob ein Rückruf erforderlich ist. Der Rückruf ist der Code, der ausgeführt wird, wenn die erste Operation abgeschlossen ist. In den beiden Beispielen in der Frage können wir sehen, dass nur der zweite Fall einen Rückruf hat, also ist es die asynchrone Operation der beiden. Dies ist aufgrund der unterschiedlichen Arten der Behandlung des Ergebnisses einer asynchronen Operation nicht immer der Fall.
Um mehr zu erfahren, lesen Sie über Versprechen. Versprechen sind eine weitere Möglichkeit, mit dem Ergebnis einer asynchronen Operation umzugehen. Das Schöne an Versprechungen ist, dass sich der Codierungsstil eher wie synchroner Code anfühlt.
Viele Bibliotheken wie der Knoten 'fs' bieten für einige Operationen sowohl synchrone als auch asynchrone Stile. In Fällen, in denen die Operation nicht lange dauert und nicht häufig verwendet wird - wie beim Lesen einer Konfigurationsdatei - führt die Operation im synchronen Stil zu Code, der leichter zu lesen ist.