Heim >Web-Frontend >js-Tutorial >Wie kann ich Versprechen für saubereren asynchronen JavaScript-Code entschachteln?

Wie kann ich Versprechen für saubereren asynchronen JavaScript-Code entschachteln?

Barbara Streisand
Barbara StreisandOriginal
2024-12-09 22:40:10734Durchsuche

How Can I Unnest Promises for Cleaner Asynchronous JavaScript Code?

Verketten von Versprechen zum Entfernen verschachtelter Strukturen

Bei der Arbeit mit asynchronen Vorgängen bieten Versprechen eine bequeme Möglichkeit, Rückrufe zu verarbeiten und die Lesbarkeit des Codes aufrechtzuerhalten. Allerdings können verschachtelte Versprechen den Code schnell komplex und schwer verständlich machen. In diesem Artikel wird erläutert, wie Sie verschachtelte Versprechen entfernen und für mehr Klarheit verketten.

Ansatz

Um verschachtelte Versprechen zu entfernen, geben wir bei jedem Rückruf ein neues Versprechen zurück. Dies ermöglicht es uns, die Versprechen nacheinander zu verketten, sodass keine verschachtelten Strukturen erforderlich sind. Hier ist eine modifizierte Version des bereitgestellten Codes:

exports.viewFile = function(req, res) {
    var fileId = req.params.id;
    boxContentRequest('files/' + fileId + '/content', req.user.box.accessToken)
      .then(function(response) {
          return boxViewerRequest('documents', {url: response.request.href}, 'POST');
      })
      .then(function(response) {
          return boxViewerRequest('sessions', {document_id: response.body.id}, 'POST');
      })
      .then(function(response) {
          console.log(response);
      });
};

In diesem Code gibt jeder then-Rückruf das Versprechen für die nachfolgende Anfrage zurück und stellt so sicher, dass die Ausführung sequentiell fortgesetzt wird.

Allgemeines Muster

Das Muster für die Verkettung von Versprechen ist wie folgt:

somePromise.then(function(r1) {
    return nextPromise.then(function(r2) {
        return anyValue;
    });
}) // resolves with anyValue

     ||
    \||/
     \/

somePromise.then(function(r1) {
    return nextPromise;
}).then(function(r2) {
    return anyValue;
}) // resolves with anyValue as well

Bei der Rückgabe eines neuen Versprechen, der resultierende Wert aus diesem Versprechen wird an den nächsten Handler in der Kette übergeben. Wenn alternativ das vom Handler zurückgegebene Versprechen das letzte in der Kette ist, wird der Auflösungswert dieses Versprechens an den Verbraucher übergeben.

Das obige ist der detaillierte Inhalt vonWie kann ich Versprechen für saubereren asynchronen JavaScript-Code entschachteln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn