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