Maison >interface Web >js tutoriel >Comment puis-je désimbriquer les promesses pour un code JavaScript asynchrone plus propre ?

Comment puis-je désimbriquer les promesses pour un code JavaScript asynchrone plus propre ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-09 22:40:10734parcourir

How Can I Unnest Promises for Cleaner Asynchronous JavaScript Code?

Chaînage de promesses pour supprimer les structures imbriquées

Lorsque vous travaillez avec des opérations asynchrones, les promesses constituent un moyen pratique de gérer les rappels et de maintenir la lisibilité du code. Cependant, les promesses imbriquées peuvent rapidement rendre le code complexe et difficile à suivre. Cet article explique comment supprimer les promesses imbriquées et les enchaîner pour plus de clarté.

Approche

Pour supprimer les promesses imbriquées, nous renvoyons une nouvelle promesse à chaque fois, puis rappelons. Cela nous permet d’enchaîner les promesses les unes après les autres, éliminant ainsi le besoin de structures imbriquées. Voici une version modifiée du code fourni :

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);
      });
};

Dans ce code, chaque rappel then renvoie la promesse pour la requête suivante, garantissant que l'exécution se poursuit de manière séquentielle.

Général Modèle

Le modèle d'enchaînement des promesses est le suivant :

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

Lors du retour d'un nouvelle promesse, la valeur résultante de cette promesse est transmise au gestionnaire suivant de la chaîne. Alternativement, si la promesse renvoyée par le gestionnaire est la dernière de la chaîne, la valeur de résolution de cette promesse est transmise au consommateur.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn