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