Einführung
Verschachtelte Versprechen können entstehen, wenn mit asynchronen Vorgängen gearbeitet wird, die aufeinander aufbauen. Im bereitgestellten Code stellt die viewFile-Funktion mithilfe von boxContentRequest und boxViewerRequest mehrere Netzwerkanfragen. Diese Anfragen sind derzeit in verschachtelten Versprechen strukturiert, was es schwierig macht, dem Code zu folgen.
Versprechen verketten
Um die verschachtelten Versprechen zu eliminieren, können wir die Verkettung von Versprechen verwenden. Diese Technik ermöglicht es uns, mehrere asynchrone Vorgänge sequentiell zu verbinden, wobei die Ausgabe eines Versprechens zur Eingabe des nächsten wird.
Refaktorierter Code
Der überarbeitete Code unten erreicht das gewünschte Ergebnis Verkettung:
exports.viewFile = function (req, res) { var fileId = req.params.id; boxContentRequest('files/' + fileId + '/content', req.user.box.accessToken) .then(function (response) { // Return the next promise directly return boxViewerRequest('documents', { url: response.request.href }, 'POST'); }) .then(function (response) { // Return the final promise directly return boxViewerRequest('sessions', { document_id: response.body.id }, 'POST'); }) .then(function (response) { console.log(response); }); };
Erklärung
Im überarbeiteten Code geben wir das nächste Versprechen direkt von jedem Rückruf zurück. Dadurch können wir die Versprechen nahtlos verketten und sicherstellen, dass der Ausführungsablauf der gewünschten Reihenfolge folgt.
Generisches Muster für die Versprechensverkettung
Das generische Muster für die Versprechensverkettung ist wie folgt :
// Option 1: Single-line syntax somePromise .then((r1) => nextPromise) .then((r2) => anyValue); // Option 2: Multi-line syntax somePromise .then(function (r1) { return nextPromise; }) .then(function (r2) { return anyValue; });
Beide Optionen lösen das endgültige Versprechen mit dem Wert von anyValue auf. Dieses Muster bietet eine prägnante und elegante Möglichkeit, asynchrone Vorgänge zu verbinden, die Codestruktur zu vereinfachen und die Lesbarkeit zu verbessern.
Das obige ist der detaillierte Inhalt vonWie kann die Versprechensverkettung verschachtelte Versprechen in asynchronen Vorgängen vereinfachen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!