最近は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()
メソッドである必要がある仕組みの基本的なものはありますか?