Heim >Web-Frontend >js-Tutorial >Warum ist die Ausführungsreihenfolge von JavaScript Promise nicht wie erwartet linear?
Problem
Betrachten Sie den folgenden JavaScript-Code, der Versprechen verwendet:
<code class="javascript">Promise.resolve('A') .then(function(a){console.log(2, a); return 'B';}) .then(function(a){ Promise.resolve('C') .then(function(a){console.log(7, a);}) .then(function(a){console.log(8, a);}); console.log(3, a); return a;}) .then(function(a){ Promise.resolve('D') .then(function(a){console.log(9, a);}) .then(function(a){console.log(10, a);}); console.log(4, a);}) .then(function(a){ console.log(5, a);}); console.log(1); setTimeout(function(){console.log(6)},0);</code>
Die Ausgabe lautet wie folgt:
<code class="text">1 2 "A" 3 "B" 7 "C" 4 "B" 8 undefined 9 "D" 5 undefined 10 undefined 6</code>
Die Frage betrifft die Ausführungsreihenfolge, insbesondere die Zahlen 1, 2, 3, 7 usw. Warum ist es nicht die erwartete lineare Reihenfolge 1, 2, 3, 4, ...?
JavaScript-Versprechen folgen bestimmten Ausführungsregeln:
Im angegebenen Code:
Da die in .then()-Handlern erstellten unabhängigen Versprechensketten keine vorhersehbare Ausführungsreihenfolge haben, hängt die Reihenfolge von 3, 7, 4, 8, 9, 5, 10 davon ab Spezifische Promise-Engine-Implementierung.
Um eine bestimmte Ausführungsreihenfolge für asynchrone Vorgänge sicherzustellen, wird Folgendes empfohlen:
Im gegebenen Beispiel wird das Promise.resolve('C')-Promise aus dem .then( zurückgegeben )-Handler in Zeile 4 würde die Versprechensketten verknüpfen und zur erwarteten sequentiellen Ausführungsreihenfolge führen.
Das obige ist der detaillierte Inhalt vonWarum ist die Ausführungsreihenfolge von JavaScript Promise nicht wie erwartet linear?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!