Maison >interface Web >js tutoriel >Comment le chaînage de promesses peut-il simplifier les promesses imbriquées dans les opérations asynchrones ?
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!