Quando si fornisce un gestore .catch()
o il secondo argomento per .then()
, la promessa respinta è stata "gestita". Per impostazione predefinita, quando si fornisce tale gestore di rifiuto, il sistema di promessa presuppone che il rifiuto sia stato gestito e che la catena continui.
Se non si desidera continuare la catena, quindi dal gestore di rifiuto, è possibile restituire una promessa respinta o generare un errore. Ciò interromperà la catena fino a quando un altro respinge il gestore della catena.
Così, qui sono le possibilità di una catena come si mostrano:
1) Non v'è alcun rifiutano gestore della catena
La catena si arresta completamente e non oltre .then()
soddisfare i gestori vengono eseguiti .
2) C'è un gestore di rifiuto nella catena che non restituisce nulla o restituisce un valore normale o una promessa soddisfatta o una promessa che alla fine soddisfa.
Questo è ciò che il codice attualmente mostra. Lo scarto è considerato gestito e lo stato di promessa della catena si trasforma in una promessa soddisfatta, così vengono chiamati i successivi gestori di adempimenti nella catena.
3) C'è uno scarto gestore della catena che sia restituisce una promessa respinta o genera un errore
Tornando alla promessa rifiutato (o una promessa che rifiuta in futuro) o lanciare un nuovo errore (che viene trasformato in promessa respinta) interromperà l'ulteriore elaborazione della catena fino al prossimo gestore di errori.
Quindi, se hai cambiato onRejected()
gestore per questo:
function onRejected(error) {
 console.log(error);
throw error; // rethrow error to stop the rest of the chain
}
Poi, la catena promessa si fermava lì.
È importante capire perché funziona in questo modo. Ciò consente di gestire un errore nel mezzo della catena di promesse e il codice che gestisce l'errore arriva a decidere se la catena continua o meno in base a ciò che restituisce o genera. Se restituisce nulla o un valore normale o una promessa soddisfatta, l'elaborazione della catena continua - l'errore è stato gestito - non è necessario interrompere l'ulteriore elaborazione.
Tuttavia, se l'errore è più grave di quello e l'elaborazione non deve continuare, il gestore di rifiuti può lanciare lo stesso errore o lanciare un errore diverso o restituire una promessa rifiutata e la catena salterà i gestori di adempiere fino a il successivo gestore di rifiuti nella catena.
possibile duplicato di [Chained promises not passing on rejection] (http://stackoverflow.com/q/16371129/1048572) – Bergi