Przeczytałem kilka artykułów na ten temat, ale nadal nie jest dla mnie jasne, czy istnieje różnica między Promise.reject
zgł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ć throw
po prostu dlatego, że jest krótszy, ale zastanawiałem się, czy jest jakaś przewaga jednego nad drugim.
throw
jest 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.
reject
go 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,throw
ponieważ lubię czytelność.