2015-12-05 15 views
9

Qual è la differenza tra catch e then(_,onRejected) in ES6 Promise? So solo che onRejected non gestisce lo stato rifiutato di interno Promise.on rejected catch in Promise

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 

risposta

8

Il tuo primo pezzo di codice solito cattura l'errore perché il gestore di errori è nella stessa .then dove l'errore è gettato


Per quanto riguarda la tua domanda

.catch(onRejected); 

è identico a

.then(null, onRejected); 

non sicuro di quello

.then(_, onRejected); 

farebbe, dipende da quello che è _ Credo

+1

OP non stava usando '_' come nome di una variabile, ma per indicare che stava solo chiedendo del secondo parametro. – hippietrail

0

Nel primo esempio, il tuo onRejected si applica solo ai Promise.resolve(). In then(onResolved, onRejected), verrà chiamata solo una delle due, non entrambe. Prova con Promise.reject('something').then(), avrai qualcosa di stampato nella console. Il catch() si applica alla promessa che si sta restituendo in modo che l'errore venga rilevato come previsto.