Démêler les promesses imbriquées
Les promesses NodeJS fournissent un mécanisme puissant pour gérer les opérations asynchrones. Cependant, les promesses imbriquées peuvent introduire de la complexité dans le code. Cette question examine comment transformer les promesses imbriquées en une séquence chaînée plus gérable.
Structure du code d'origine
Le code d'origine suit une approche imbriquée, dans laquelle la résolution de chaque promesse déclenche un appel de promesse ultérieur :
boxContentRequest('files/' + fileId + '/content', req.user.box.accessToken) .then(function(response) { boxViewerRequest('documents', {url: response.request.href}, 'POST') .then(function(response) { boxViewerRequest('sessions', {document_id: response.body.id}, 'POST') .then(function(response) { console.log(response); }); }); });
Chaînage Promesses
Pour enchaîner les promesses, il faut retourner la nouvelle promesse dès le rappel puis de chaque promesse. Cette approche permet aux promesses enchaînées de se résoudre de manière séquentielle.
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); });
La structure de code modifiée garantit que la chaîne de promesses se poursuit de manière transparente, chaque étape transmettant son résultat à la promesse suivante de la séquence.
Modèle générique
Ce modèle d'enchaînement peut être généralisé comme suit :
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
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!