Po podaniu obsługi .catch()
lub drugiego argumentu dla .then()
odrzucona obietnica została "obsłużona". Domyślnie, gdy podasz taki program obsługi odrzucania, system obietnic zakłada, że odrzucenie zostało obsłużone, a łańcuch powinien być kontynuowany.
Jeśli nie chcesz, aby łańcuch był kontynuowany, możesz odrzucić odrzuconą obietnicę lub podać błąd. To spowoduje zatrzymanie tego łańcucha, aż do momentu, gdy inny operator odrzuci łańcuch.
Tak, tu są możliwości w łańcuchu jak pokażesz:
1) Nie ma odrzucić obsługi w łańcuchu
Łańcuch zostaje zatrzymany w całości i bez dalszego .then()
spełniać teleskopowe są wykonywane .
2) W łańcuchu znajduje się operator odrzuceń, który albo niczego nie zwraca, albo zwraca normalną wartość, spełnioną obietnicę lub obietnicę, która ostatecznie się spełni.
To właśnie pokazuje Twój kod. Odrzucenie jest traktowane jako obsługiwane, a obiecujący stan łańcucha zmienia się w spełnioną obietnicę, tak aby wywoływać kolejne procedury obsługi w łańcuchu.
3) Jest odrzucić obsługi w łańcuchu, który albo zwraca odrzucony obietnicę lub zgłasza błąd
zwrotu odrzucony obietnicy (lub obietnicę, że odrzuca w przyszłości) lub rzucanie nowy błąd (która zostaje przekształcona w odrzuconą obietnicę) przerwie dalsze przetwarzanie łańcucha aż do następnego programu obsługi błędów.
Tak więc, jeśli zmieniłeś obsługi do tego onRejected()
:
function onRejected(error) {
 console.log(error);
throw error; // rethrow error to stop the rest of the chain
}
Następnie Twój łańcuch obietnica będzie tam zatrzymać.
Ważne jest, aby zrozumieć, dlaczego działa w ten sposób. Pozwala to na obsługę błędu w środku łańcucha obietnic, a kod obsługujący błąd decyduje, czy łańcuch jest kontynuowany, czy nie, w oparciu o to, co zwraca lub rzuca. Jeśli nie zwraca nic lub wartość normalną lub spełnioną obietnicę, przetwarzanie łańcucha trwa - błąd został obsłużony - nie ma potrzeby zatrzymywania dalszego przetwarzania.
Ale jeśli błąd jest bardziej poważny, a przetwarzanie nie powinno być kontynuowane, wówczas program obsługi odrzuceń może albo rzucić ten sam błąd, albo wygenerować inny błąd, albo zwrócić odrzuconą obietnicę, a łańcuch pominie wszelkie procedury obsługi do momentu następny menedżer odrzucający w łańcuchu.
możliwy duplikat [Przywołane obietnice nieprzekazujące odrzucenia] (http://stackoverflow.com/q/16371129/1048572) – Bergi