我听到这样的意见,你应该完全避免使用 try/catch,因为它需要很多资源。那么 promise 错误处理可以更快吗?或者根本不重要?
function f(somethingDangerous) {
return new Promise((resolve, reject) => {
// try {
// somethingDangerous();
// resolve();
// } catch (err) {
// reject(err);
// }
// VS
somethingDangerous();
resolve();
}).catch((err) => {
console.error('Catched: ' + err);
});
}
f(() => {throw 'DANGEROUS THING';});
UPD :我知道 try/catch 不能与内部的异步代码一起使用。我只是想知道是否有任何理由因为性能问题而避免使用 try/catch?上述两种方法之间有什么区别吗?
UPD2 :试图让我的马赛跑 :) https://jsperf.com/try-catch-vs-promise
原文由 Maksim Nesterenko 发布,翻译遵循 CC BY-SA 4.0 许可协议
您应该 仅 将 Promises 用于异步函数,而不是其他任何东西。不要将它们滥用为错误 monad,那将是一种资源浪费,而且它们固有的异步性会使一切变得更加繁琐。
当你有同步代码时,使用
try
/catch
进行异常处理。如果 您已经有承诺代码,则可以在某些情况下避免这种情况:当您希望异常拒绝承诺时。在这些情况下,你应该让你的承诺的内置错误处理完成它的工作,而不是通过额外但毫无意义的
try
/catch
层使一切复杂化: