Ale*_*rff 4 javascript try-catch node.js promise es6-promise
我听到这样的意见,你应该避免使用try/catch,因为它需要很多资源.那么可以承诺错误处理可能会更快吗?或者根本没关系?
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';});
Run Code Online (Sandbox Code Playgroud)
UPD:我知道try/catch不适用于内部的异步代码.我只是想知道是否有任何理由因为性能问题而避免尝试/捕获?以上两种方法之间有什么区别吗?
UPD2:试图比赛我的马:) https://jsperf.com/try-catch-vs-promise
Ber*_*rgi 13
您应该仅将Promises 用于异步函数而不使用其他任何函数.不要滥用它们作为错误monad,这将浪费资源,它们固有的异步会使一切变得更加繁琐.
如果有同步代码,请使用try/ catch进行异常处理.
/* Wrong */
return new Promise(function(resolve, reject) {
resolve(x / y);
}).catch(err => NaN)
/* Right */
try {
return x / y;
} catch(e) {
return NaN;
}
Run Code Online (Sandbox Code Playgroud)
当且仅当你已经有承诺的代码,那么就可以避免在某些情况下:当你想例外拒绝承诺.在这些情况下,你应该让你的promises的内置错误处理完成它的工作,而不是通过一个额外但无意义的try/ catch层复杂化所有东西:
/* Wrong */
new Promise(function(resolve, reject) {
try { // when used synchronous in the executor callback
…
resolve(somethingSynchronous());
} catch (e) {
reject(e);
}
});
/* Right */
new Promise(function(resolve, reject) {
…
resolve(somethingExceptionally());
});
Run Code Online (Sandbox Code Playgroud)
/* Wrong */
….then(function(res) {
try {
…
return somethingExceptionally();
} catch(e) {
return Promise.reject(e);
}
}).…
/* Right */
….then(function(res) {
…
return somethingExceptionally();
}).…
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12203 次 |
| 最近记录: |