2015-12-05 6 views
9

Was ist der Unterschied zwischen catch und then(_,onRejected) in ES6 Promise? Ich weiß nur, dass onRejected nicht den abgelehnten Zustand der inneren Promise behandelt.onrejected vs catch in Versprechen

Promise.resolve().then(() => { 
    return new Promise((resolve,reject) => { 
     throw new Error('Error occurs'); 
    }); 
},er => console.log(er)); //Chrome throws `Uncaught (in promise)` 

Promise.resolve().then(() => { 
    return new Promise((resolve,reject) => { 
     throw new Error('Error occurs'); 
    }); 
}).catch(er => console.log(er)); //Error occurs 

Antwort

8

Ihr erstes Stück Code fangen werden nicht den Fehler, da die Fehlerbehandlung in den gleichen .then ist, wo der Fehler


Was Ihre Frage geworfen wird

.catch(onRejected); 

ist identisch zu

.then(null, onRejected); 

nicht sicher, was

.then(_, onRejected); 

tun würde, hängt davon ab, was _ I

+1

OP verwendete '_' nicht als Variablennamen, sondern um anzugeben, dass er nur nach dem zweiten Parameter gefragt hatte. – hippietrail

0

Im ersten Beispiel erraten, Ihre onRejected gilt nur für Promise.resolve(). In then(onResolved, onRejected) wird nur eine von zwei Funktionen aufgerufen, nicht beide. Versuchen Sie mit Promise.reject('something').then(), Sie haben etwas in der Konsole gedruckt. Die catch() gilt für die Versprechen, die Sie zurückgeben, so dass der Fehler wie erwartet gefangen wird.

Verwandte Themen