Я прочитав кілька статей на цю тему, але мені все одно не зрозуміло, чи є різниця між 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тому що мені подобається читабельність.