这些天我大量使用ES6 Promises 。onRejected
因此,如果您不指定函数,很容易忘记异常:
new Promise(function(resolve, reject) {
resolve(doCrazyThingThatMightThrowAnException());
}).then(function(result) {
return performDangerousTranformation(result);
});
如果我可以添加一些字节catch()
来确保异常进入控制台,那就太好了:
new Promise(function(resolve, reject) {
resolve(doCrazyThingThatMightThrowAnException());
}).then(function(result) {
return performDangerousTranformation(result);
}).catch(console.error);
不幸的是,这不起作用,因为console.error
它是一种方法而不是函数。也就是说,您需要console
在调用时指定接收方console.error()
。您可以在浏览器控制台中轻松验证这一点:
> console.error('err');
prints err
> var f = console.error;
> f('err');
throws Illegal invocation exception
这意味着添加我的catch()
处理程序有点冗长:
new Promise(function(resolve, reject) {
resolve(doCrazyThingThatMightThrowAnException());
}).then(function(result) {
return performDangerousTranformation(result);
}).catch(function(error) { console.error(error); });
诚然,它在 ES6 中要好一些:
new Promise(function(resolve, reject) {
resolve(doCrazyThingThatMightThrowAnException());
}).then(function(result) {
return performDangerousTranformation(result);
}).catch((error) => console.error(error));
但是最好避免额外的打字。更糟糕的是,如果您catch(console.error)
今天使用,您的异常会被默默地忽略,这正是您要解决的问题!console.error()
它需要成为一种方法,是否有任何基本的工作原理?