Maison >interface Web >js tutoriel >Comment le chaînage de promesses peut-il simplifier les promesses imbriquées dans les opérations asynchrones ?

Comment le chaînage de promesses peut-il simplifier les promesses imbriquées dans les opérations asynchrones ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-10 15:10:14256parcourir

How Can Promise Chaining Simplify Nested Promises in Asynchronous Operations?

Démêler les promesses imbriquées

Introduction

Des promesses imbriquées peuvent survenir lorsque vous travaillez avec des opérations asynchrones qui s'appuient les unes sur les autres. Dans le code fourni, la fonction viewFile effectue plusieurs requêtes réseau à l'aide de boxContentRequest et boxViewerRequest. Ces requêtes sont actuellement structurées au sein de promesses imbriquées, ce qui rend le code difficile à suivre.

Chaînage des promesses

Pour éliminer les promesses imbriquées, nous pouvons utiliser le chaînage de promesses. Cette technique nous permet de connecter plusieurs opérations asynchrones de manière séquentielle, où la sortie d'une promesse devient l'entrée de la suivante.

Code refactorisé

Le code refactorisé ci-dessous atteint le résultat souhaité chaînage :

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

Explication

Dans le code refactorisé, nous renvoyons la promesse suivante directement à partir de chaque puis rappel. Cela nous permet d'enchaîner les promesses de manière transparente, garantissant que le flux d'exécution suit la séquence souhaitée.

Modèle générique de chaînage de promesses

Le modèle générique pour l'enchaînement de promesses est le suivant :

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

Les deux options résoudront la promesse finale avec la valeur de anyValue. Ce modèle fournit un moyen concis et élégant de connecter des opérations asynchrones, simplifiant la structure du code et améliorant la lisibilité.

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