Ich habe mehrere Artikel zu diesem Thema gelesen, aber es ist mir immer noch nicht klar, ob es einen Unterschied zwischen dem Promise.reject
Auslösen eines Fehlers gibt. Zum Beispiel,
Verwenden von Promise.reject
return asyncIsPermitted()
.then(function(result) {
if (result === true) {
return true;
}
else {
return Promise.reject(new PermissionDenied());
}
});
Mit werfen
return asyncIsPermitted()
.then(function(result) {
if (result === true) {
return true;
}
else {
throw new PermissionDenied();
}
});
Ich bevorzuge es throw
einfach zu verwenden , weil es kürzer ist, habe mich aber gefragt, ob es einen Vorteil gegenüber dem anderen gibt.
throw
ist, dass es nicht zu einem abgelehnten Versprechen führen würde, wenn es aus einem asynchronen Rückruf wie einem setTimeout heraus geworfen würde. jsfiddle.net/m07van33 @Blondie Ihre Antwort war korrekt.
reject
es von meiner Parameterliste weglassen kann.
.then()
Handler fängt die ausgelöste Ausnahme ab und verwandelt sie automatisch in ein abgelehntes Versprechen. Da ich gelesen habe, dass ausgelöste Ausnahmen nicht besonders schnell ausgeführt werden können, würde ich vermuten, dass die Rückgabe des abgelehnten Versprechens möglicherweise etwas schneller ausgeführt werden kann, aber Sie müssten einen Test in mehreren modernen Browsern erstellen, wenn dies wichtig wäre. Ich persönlich benutze,throw
weil ich die Lesbarkeit mag.