Jeder weiß, dass Nodejs sehr schnell ist. Der Grund dafür ist, dass Node asynchrone Rückrufe verwendet, um Ereignisse zu verarbeiten, auf die gewartet werden muss, sodass der Code weiterhin ausgeführt werden kann, ohne irgendwo warten zu müssen. Es gibt jedoch auch einen Nachteil. Wenn wir beispielsweise viele Rückrufe ausführen, müssen wir den nächsten Rückruf ausführen und dann den nächsten Rückruf ausführen. Dies führt zu einer Verschachtelung und zu unklarem Code, was sehr schwierig ist . Es ist leicht, in das „Rückrufgefängnis“ zu geraten, was leicht zu folgendem Beispiel führen kann:
async(1, function(value){ async(value, function(value){ async(value, function(value){ async(value, function(value){ async(value, function(value){ async(value, final); }); }); }); }); });
Diese Schreibweise lässt die Leute zusammenbrechen. Gibt es also eine Möglichkeit, das Problem zu lösen? Problem, oder gibt es eine andere Schreibweise? Die Antwort lautet: Ja. Das neue Versprechensobjekt von es6 und das asynchrone Warten von es7 können dieses Problem lösen. Natürlich wird das Versprechensobjekt hier zuerst vorgestellt und das asynchrone Warten von es7 wird in den folgenden Artikeln geteilt. Das Promise-Objekt wird im Folgenden vorgestellt.
2. Einführung
Promise ist ein Objekt, das zur Abwicklung asynchroner Operationen verwendet wird. Es ermöglicht uns, asynchrone Aufrufe eleganter, schöner und einfacher zu lesen. Wie der Name schon sagt, bedeutet es Versprechen, was bedeutet, dass er uns nach der Verwendung von Promise auf jeden Fall eine Antwort gibt. Unabhängig davon, ob es erfolgreich ist oder nicht, wird er uns eine Antwort geben, sodass wir uns keine Sorgen machen müssen, dass er wegläuft weg, haha. Daher hat Promise drei Zustände: ausstehend (in Bearbeitung), gelöst (abgeschlossen) und abgelehnt (fehlgeschlagen). Nur asynchron zurückgegebene Strukturen können ihren Zustand ändern. Daher gibt es im Allgemeinen nur zwei Versprechensprozesse: ausstehend – >gelöst oder ausstehend – >abgelehnt.
Das Promise-Objekt verfügt auch über eine häufiger verwendete Then-Methode, mit der die Callback-Funktion ausgeführt wird. Die Then-Methode akzeptiert zwei Parameter, der erste ist ein erfolgreich aufgelöster Callback, der andere ist ein fehlgeschlagener abgelehnter Callback. und der zweite optionale Rückrufparameter für Fehler. Und die then-Methode kann auch ein Promise-Objekt zurückgeben, sodass es in einer Kette aufgerufen werden kann. Als nächstes der Code:
var Pro = function (time) { //返回一个Promise对象 return new Promise(function (resolve, reject) { console.log('123'); //模拟接口调用 setTimeout(function () { //这里告诉Promise 成功了,然后去执行then方法的第一个函数 resolve('成功返回'); }, time); }) }; (function(){ console.log('start'); Pro(3000) .then(function(data){ console.log(data); return Pro(5000);}) .then(function(data){ console.log(data); console.log('end'); }) })();
Im obigen Code wird eine Pro-Variable definiert und ihr dann eine anonyme Funktion zugewiesen. Die Funktion gibt ein Promise-Objekt zurück und empfängt dann eine Funktion im Objekt , bzw. löst auf und Wenn die Methode „Ablehnen“ in Parametern übergeben wird, wird setTimeOut verwendet, um eine asynchrone Anforderung zu simulieren. Wenn die Methode „Auflösen“ ausgeführt wird, wird eine Funktion der Methode „Dann“ aufgerufen. Die Ergebnisse sind wie folgt:
3. Promise API
1, Promise.resolve()
2, Promise.reject()
3 , Promise.prototype.then()
4, Promise.prototype.catch()
5, Promise.all() // Alle sind abgeschlossen, äquivalent zu
6, Promise.race( ) // Vervollständigen Sie einfach eines, was äquivalent zu oder
1 ist. Die Funktion von Promise.resolve() besteht darin, das vorhandene Objekt in ein Promise-Objekt zu konvertieren. Promise.resolve('test')==new Promise(resolve =>resolve('test'))
2. Promise.reject() gibt auch ein Promise-Objekt zurück, der Status ist abgelehnt
3 Oben eingeführt, hier ist es Keine weitere Einführung.
4. Catch(): Rückruffunktion, wenn ein Fehler auftritt.
5. Promise.all() eignet sich für die erfolgreiche Ausführung von then(), nachdem alle Ergebnisse abgeschlossen sind. Zum Beispiel:
let p1 =new Promise(function(resolve,reject){ resolve(1); }); let p2 = new Promise(function(resolve,reject){ resolve(2); }); let p3 = new Promise(function(resolve,reject){ resolve(3); }); Promise.all([p1, p2, p3]).then(function (results) { console.log('success:'+results); }).catch(function(r){ console.log("error"); console.log(r); });
Endgültige Ausgabe:
6. Die Funktion von Promise.race() besteht darin, mehrere Instanzen gleichzeitig auszuführen. solange es einen gibt. Wenn eine Instanz den Status ändert, wird das Versprechen in den geänderten Status dieser Instanz geändert
IV. Ausgabe:
var Pro = function () { //返回一个Promise对象 return new Promise(function (resolve, reject) { //模拟接口调用 setTimeout(function () { resolve(true); }, 1000); }) }; var Pro2 = function () { //返回一个Promise对象 return new Promise(function (resolve, reject) { //模拟接口调用 setTimeout(function () { resolve('Pro2成功执行'); }, 1000); }) }; Pro().then(function(data){ var val = data; console.log(val) if (val) { console.log(1111) return Pro2() } }).then(function(data1){ console.log(data1) })
Auf diese Weise können Sie die then-Methode verwenden, um Kettenaufrufe zu implementieren.
Verwandte Empfehlungen:
Detaillierte Erläuterung der immer Methodeninstanz der ES6 Promise-Erweiterung
Wie man jQuerys Promise richtig verwendet
Detaillierte Erläuterung der sequentiellen Ausführung von promsie.all und Promise
Das obige ist der detaillierte Inhalt vonPromise-Instanzanalyse in js. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!