Я прочитав кілька статей на цю тему, але мені все одно не зрозуміло, чи є різниця між Promise.reject
помилкою проти кидання. Наприклад,
Використання Promise.reject
return asyncIsPermitted()
.then(function(result) {
if (result === true) {
return true;
}
else {
return Promise.reject(new PermissionDenied());
}
});
Використання кидка
return asyncIsPermitted()
.then(function(result) {
if (result === true) {
return true;
}
else {
throw new PermissionDenied();
}
});
Я вважаю за краще використовувати throw
просто тому, що він коротший, але цікаво, чи є якась перевага одного над іншим.
throw
є те, що це не призведе до відхиленої обіцянки, якщо вона буде кинута з асинхронного зворотного виклику, наприклад setTimeout. jsfiddle.net/m07van33 @Blondie Ваша відповідь була правильною.
reject
його зі свого списку парам.
.then()
Оброблювач ловить кинуте виключення і перетворює його в відхиленому обіцянку автоматично. Оскільки я читав, що викинуті винятки виконувати не особливо швидко, я б припустив, що повернення відхиленої обіцянки може бути трохи швидше виконати, але вам доведеться розробити тест у кількох сучасних браузерах, якби це було важливо знати. Я особисто використовую,throw
тому що мені подобається читабельність.