Przeczytałem kilka artykułów na ten temat, ale nadal nie jest dla mnie jasne, czy istnieje różnica między Promise.rejectzgłaszaniem błędu. Na przykład,
Korzystanie z Promise.reject
return asyncIsPermitted()
.then(function(result) {
if (result === true) {
return true;
}
else {
return Promise.reject(new PermissionDenied());
}
});
Za pomocą rzutu
return asyncIsPermitted()
.then(function(result) {
if (result === true) {
return true;
}
else {
throw new PermissionDenied();
}
});
Wolę używać throwpo prostu dlatego, że jest krótszy, ale zastanawiałem się, czy jest jakaś przewaga jednego nad drugim.
throwjest to, że nie spowodowałoby to odrzucenia obietnicy, gdyby została wyrzucona z asynchronicznego wywołania zwrotnego, takiego jak setTimeout. jsfiddle.net/m07van33 @Blondie Twoja odpowiedź była poprawna.
rejectgo na liście parametrów.
.then()przechwytuje zgłoszony wyjątek i automatycznie zamienia go w odrzuconą obietnicę. Ponieważ przeczytałem, że zgłoszone wyjątki nie są szczególnie szybkie do wykonania, zgaduję, że zwrócenie odrzuconej obietnicy może być nieco szybsze do wykonania, ale trzeba by było opracować test w wielu nowoczesnych przeglądarkach, gdyby to było ważne. Osobiście używam,throwponieważ lubię czytelność.