Ho letto diversi articoli su questo argomento, ma non mi è ancora chiaro se c'è una differenza tra Promise.rejectvs. 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 throwsemplicemente 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.
rejectdal 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 usothrowperché mi piace la leggibilità.