2017-12-07 5 views

Antwort

3

Nein, Versprechen machen Node.js Code nicht synchron laufen - Versprechen können Sie Ströme schreiben, die erscheinen synchron.

Wenn Sie dies tun:

console.log(1); 
setTimeout(() => console.log(2)); 
console.log(3); 

Node.js den Code läuft sequantially, es zuerst anmeldet 1, dann registriert sie eine Funktion nach einem Timeout passieren, dann meldet er 3. Nach einem großen, wenn die Timer feuert - es führt seine Funktion aus und protokolliert 2. Es sind keine Threads beteiligt.

Mit Versprechen und async erwarten, wenn Sie await Sie Node.js ausdrücklich sagen "pausieren Sie die Ausführung dieser Funktion und weiter, wenn das Versprechen, ich warte auf gelöst". pause executing ist nicht das gleiche wie eine Thread-Blockierung - auf Betriebssystemebene findet kein Kontextwechsel statt - es behält nur die Funktion im Auge und wenn das Versprechen verrechnet wird, ruft es es auf.

Knoten wird mit "unserem Code - Plattform Code" Zyklen ausgeführt, läuft Ihr Code (bis es endet, zum Beispiel durch das Treffen einer Wartezeit), dann läuft der Plattformcode (z. B. Timer und I/O überprüfen) und Dann kann dieser Code Ihren Code (zum Beispiel Ihre suspendierte Async-Funktion) erneut aufrufen und ausführen.

+0

was bestimmt, ob ich Versprechungen vs async verwenden soll? –

+1

'async/await' ist aufgebaut _auf der Spitze der Versprechen_, wenn Sie async verwenden/erwarten Sie _are_ mit Versprechen bereits :) –

+0

danke mein Herr! =} –

Verwandte Themen