Wie bricht man die Versprechen einer node.j-Kette mit Q richtig ab?

Ich benutzedas Q-Modul für Node.js in Versuchen, die "Pyramide des Schicksals" in Szenarien zu vermeiden, in denen ich viele Schritte habe. Zum Beispiel:

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();
}

Im Wesentlichen scheint dies zu funktionieren; Wenn ein Fehler durch einen der Taskschritte ausgelöst wird, wird er an den Rückruf übergeben (obwohl ich Verbesserungen begrüßen würde, da ich neu bei node.js Versprechen bin). Ich habe jedoch ein Problem, wenn ich die Task-Chain vorzeitig abbrechen muss. Wenn zum Beispiel result1 erfolgreich zurückgegeben wird, möchte ich den Rückruf möglicherweise frühzeitig aufrufen und den Rest abbrechen, aber meine Versuche, dies zu tun, schlagen fehl ...

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();
}

In diesem Beispiel werden beide abgebrochen. und "Schritt 3 ausführen ..." gedruckt.

Ich bin mir sicher, dass ich hier nur einige Grundprinzipien missverstehe und würde mich über jede Hilfe freuen. Vielen Dank!

Antworten auf die Frage(3)

Ihre Antwort auf die Frage