私はこの問題に関するいくつかの記事を読みましたが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
読みやすさが好きなので個人的に使用しています。