Ho letto diversi articoli su questo argomento, ma non mi è ancora chiaro se c'è una differenza tra Promise.reject
vs. lanciare un errore. Per esempio,
Utilizzando Promise.reject
return asyncIsPermitted()
.then(function(result) {
if (result === true) {
return true;
}
else {
return Promise.reject(new PermissionDenied());
}
});
Usando il tiro
return asyncIsPermitted()
.then(function(result) {
if (result === true) {
return true;
}
else {
throw new PermissionDenied();
}
});
La mia preferenza è quella di usare throw
semplicemente perché è più corto, ma mi chiedevo se ci fosse qualche vantaggio rispetto all'altro.
throw
è che non si tradurrebbe in una promessa rifiutata se fosse stata lanciata da un callback asincrono, come setTimeout. jsfiddle.net/m07van33 @Blondie la tua risposta è stata corretta.
reject
dal mio elenco di parametri.
.then()
gestore rileva l'eccezione generata e la trasforma automaticamente in una promessa rifiutata. Dato che ho letto che le eccezioni generate non sono particolarmente veloci da eseguire, immagino che restituire la promessa respinta potrebbe essere leggermente più veloce da eseguire, ma dovresti escogitare un test su più browser moderni se fosse importante saperlo. Personalmente usothrow
perché mi piace la leggibilità.