Maison >interface Web >js tutoriel >Comment les promesses Node.js imbriquées peuvent-elles être transformées en une séquence chaînée ?

Comment les promesses Node.js imbriquées peuvent-elles être transformées en une séquence chaînée ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-14 11:57:11550parcourir

How Can Nested Node.js Promises Be Transformed into a Chained Sequence?

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!

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