Eu li vários artigos sobre esse assunto, mas ainda não está claro para mim se há uma diferença entre Promise.reject
vs. lançar um erro. Por exemplo,
Usando Promise.reject
return asyncIsPermitted()
.then(function(result) {
if (result === true) {
return true;
}
else {
return Promise.reject(new PermissionDenied());
}
});
Usando throw
return asyncIsPermitted()
.then(function(result) {
if (result === true) {
return true;
}
else {
throw new PermissionDenied();
}
});
Minha preferência é usar throw
simplesmente porque é mais curto, mas queria saber se existe alguma vantagem de uma sobre a outra.
throw
é que isso não resultaria em uma promessa rejeitada se fosse lançada de dentro de um retorno de chamada assíncrono, como um setTimeout. jsfiddle.net/m07van33 @Blondie, sua resposta estava correta.
reject
lo da minha lista de parâmetros.
.then()
manipulador captura a exceção lançada e a transforma em uma promessa rejeitada automaticamente. Como li que as exceções lançadas não são particularmente rápidas de executar, acho que devolver a promessa rejeitada pode ser um pouco mais rápida de executar, mas você teria que criar um teste em vários navegadores modernos, se isso fosse importante. Eu pessoalmente usothrow
porque gosto da legibilidade.