Comment annuler un node.js la promesse de la chaîne à l'aide de Q?

Je suis en utilisant le module Q pour Node.js dans les tentatives pour éviter la "pyramide de la mort" dans les scénarios où j'ai de nombreuses étapes. Par exemple:

function doTask(task, callback)
{
    Q.ncall(task.step1, task)
    .then(function(result1){
        return Q.ncall(task.step2, task);
    })
    .then(function(result2){
        return Q.ncall(task.step3, task);
    })
    .fail(callback).end();
}

Essentiellement, cela semble fonctionner; si une erreur est lancée par toutes les étapes d'une tâche, il est passé à la fonction de rappel (bien que je serais la bienvenue à des améliorations, comme je suis nouvelle node.js des promesses). Cependant, j'ai un problème lorsque j'en ai besoin pour annuler la tâche chaîne tôt. Par exemple, si result1 est retournés avec succès je voudrez peut-être appeler la fonction de rappel précoce et abandonner le reste, mais mes tentatives pour faire échouer...

function doTask(task, callback)
{
    Q.ncall(task.step1, task)
    .then(function(result1){
        if(result1)
        {//the rest of the task chain is unnecessary 
            console.log('aborting!');
            callback(null, result1);
            return null;
        }
        return Q.ncall(task.step2, task);
    })
    .then(function(result2){
        console.log('doing step 3...');
        return Q.ncall(task.step3, task);
    })
    .fail(callback).end();
}

Dans cet exemple, je vois à la fois "l'abandon!" et "faire l'étape 3..." imprimé.

Je suis sûr que je suis contente de l'incompréhension de certains principes de base ici, ce serait reconnaissant de toute aide. Merci!

  • Une solution que j'ai trouvé est de créer une promesse de la chaîne après la première chaîne peut se rompre. Qu'est, dans l'exemple ci-dessus, l' .puis faire une déclaration avec result2 est attachée à la Q. ncall pour l'étape 2, au lieu d'être attaché à la promesse initiale. TOUTEFOIS, le principal inconvénient est qu'il se débarrasse de l'un des principaux avantages de Q à mon avis: éviter la pyramide de doom! C'est toujours mieux que pas de promesses, mais je n'aime pas la solution...
InformationsquelleAutor Zane Claes | 2012-07-02