Brechen javascript Versprechen Kette in eine saubere Art und Weise

Ich versuche, mich an die Kette verspricht, so dass die Kette unterbrochen werden, wenn ein Versprechen ist abgelehnt. Ich folgte die Leitungen eines Vorherige Frage ALSO und versucht, es anzuwenden, um native Versprechen, aber ich denke, ich bin Missverständnis, wie die Dinge funktionieren.

Hier ist, wie ich geschrieben haben den code:

Promise.resolve()
    .then(function() {
        return step(1)
            .then(null, function() {
                stepError(1);
            });
    })
    .then(function() {
        return step(2)
            .then(null, function() {
                stepError(2);
            });
    })
    .then(function() {
        return step(3)
            .then(null, function() {
                stepError(3);
            });
    });

function step(n) {
    console.log('Step '+n);
    return (n === 2) ? Promise.reject(n) : Promise.resolve(n);
}

function stepError(n) {
    console.log('Error '+n);
    return Promise.reject(n);
}

Die Ausgabe des obigen code ist:

Step 1
Step 2
Error 2
Step 3
[UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 2): 2]

In meinem Verständnis, Schritt 2 sollte die Kette durchbrechen und Schritt 3 nicht ausgeführt werden soll. Wenn Schritt(2) gibt eine abgelehnt Versprechen, stepError(2) wird ausgeführt, wie erwartet. Aber da gibt es Versprechen.lehnen(2), die Funktion in der nächsten dann nicht ausgeführt werden soll, und da gibt es nicht zu fangen, die in dem Ende, die abgelehnt Versprechen von Schritt 2 scheint wie erwartet weitergeleitet werden, bis es beendet die Kette, weil Sie nicht finden, eine handler.

Was vermisse ich hier ?

Hier ein JSFiddle, um mit zu spielen: https://jsfiddle.net/6p4t9xyk/

InformationsquelleAutor user6822275 | 2016-12-11
Schreibe einen Kommentar