我已经阅读了几篇有关该主题的文章,但是我仍然不清楚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()
处理器捕捉抛出的异常,并自动把它变成一个拒绝承诺。由于我读过抛出异常并不是特别快就可以执行,因此我想返回被拒绝的Promise的执行可能会更快一些,但是如果要知道这一点,则必须在多个现代浏览器中设计一个测试。我个人使用throw
是因为我喜欢可读性。