Warum kann ich nicht innerhalb werfen ein Versprechen.catch-handler?

Warum kann ich nicht einfach werfen ein Error im catch-Rückruf und lassen Sie den Prozess, den Fehler so behandeln, als ob es in jedem anderen Bereich?

Wenn ich es nicht tun console.log(err) wird nichts ausgedruckt, und ich weiß nichts über das, was passiert ist. Der Prozess endet nur...

Beispiel:

function do1() {
    return new Promise(function(resolve, reject) {
        throw new Error('do1');
        setTimeout(resolve, 1000)
    });
}

function do2() {
    return new Promise(function(resolve, reject) {
        setTimeout(function() {
            reject(new Error('do2'));
        }, 1000)
    });
}

do1().then(do2).catch(function(err) {
    //console.log(err.stack); //This is the only way to see the stack
    throw err; //This does nothing
});

Wenn callbacks, die ausgeführt werden, in dem Haupt-thread, warum die Error wird verschluckt von einem schwarzen Loch?

Es wird nicht verschluckt durch ein Schwarzes Loch. Er lehnt die Versprechen, dass .catch(…) gibt.
Siehe auch Warum sind Ausnahmen verwendet für die Ablehnung verspricht in JS? und Wie kann ich das behandeln von Ausnahmen weltweit mit native verspricht in io.js / node.js?
statt .catch((e) => { throw new Error() }) schreiben .catch((e) => { return Promise.reject(new Error()) }) oder einfach .catch((e) => Promise.reject(new Error()))

InformationsquelleAutor demian85 | 2015-06-08

Schreibe einen Kommentar