我已经阅读了几篇有关该主题的文章,但是我仍然不清楚是否Promise.reject与抛出错误之间有区别。例如,
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
使用一个相对于另一个没有优势,但是,在特定情况下throw无法使用。但是,这些情况可以解决。
每当您进入promise回调时,都可以使用throw。但是,如果您在任何其他异步回调中,则必须使用reject。
reject
例如,这不会触发捕获:
new Promise(function() { setTimeout(function() { throw 'or nah'; // return Promise.reject('or nah'); also won't work }, 1000); }).catch(function(e) { console.log(e); // doesn't happen });
相反,您将面临未解决的承诺和未捕获的异常。在这种情况下,您可能想要使用reject。但是,您可以通过两种方式解决此问题。
new Promise(function(resolve, reject) { setTimeout(function() { reject('or nah'); }, 1000); }).catch(function(e) { console.log(e); // works! });
function timeout(duration) { // Thanks joews return new Promise(function(resolve) { setTimeout(resolve, duration); }); } timeout(1000).then(function() { throw 'worky!'; // return Promise.reject('worky'); also works }).catch(function(e) { console.log(e); // 'worky!' });