Maison >interface Web >js tutoriel >Comment puis-je désimbriquer les promesses pour un code JavaScript asynchrone plus propre ?
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!