Verstehen der Ausführungsreihenfolge in JavaScript-Versprechen
Versprechen in JavaScript bieten ein asynchrones Programmiermodell, bei dem Code einmal bei einem bestimmten Ereignis oder Versprechen ausgeführt wird , ist erfüllt. Beim Umgang mit mehreren Versprechen ist es jedoch wichtig, die Reihenfolge der Ausführung zu verstehen, um unvorhersehbares Verhalten zu vermeiden.
Beachten Sie den folgenden Codeausschnitt:
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);
Bei der Ausführung werden Sie möglicherweise Folgendes beobachten Reihenfolge der Ausgabe:
1 2 "A" 3 "B" 7 "C" 4 "B" 8 undefined 9 "D" 5 undefined 10 undefined 6
Verstehen der Ausführungsreihenfolge
Empfehlungen
Um eine bestimmte Ausführungsreihenfolge sicherzustellen, vermeiden Sie die Erstellung unsynchronisierter Versprechensketten und verlassen Sie sich stattdessen auf die sequentielle Verknüpfung von Versprechen. Rückgabeversprechen von inneren .then()-Handlern, um sie mit dem übergeordneten Versprechen zu verketten, wie unten gezeigt:
Promise.resolve('A').then(function (a) { console.log(2, a); return 'B'; }).then(function (a) { var p = Promise.resolve('C').then(function (a) { console.log(7, a); }).then(function (a) { console.log(8, a); }); console.log(3, a); return p; // Link the inner promise to the parent chain }).then(function (a) { var p = Promise.resolve('D').then(function (a) { console.log(9, a); }).then(function (a) { console.log(10, a); }); console.log(4, a); return p; // Link the inner promise to the parent chain }).then(function (a) { console.log(5, a); }); console.log(1); setTimeout(function () { console.log(6) }, 0);
Mit diesem Ansatz wird die Ausführungsreihenfolge vollständig deterministisch: 1, 2 „A“, 3 „ B“, 7 „C“, 8 undefiniert, 4 undefiniert, 9 „D“, 10 undefiniert, 5 undefiniert und 6.
Das obige ist der detaillierte Inhalt vonWann werden JavaScript Promise .then()-Handler im Verhältnis zueinander ausgeführt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!