2017-10-29 24 views
0

私はアプリケーションを15.4から16に移行しています。 反応の新しいerrorBonudriesを使用していますが、大きな問題があります。 イベントと非同期アクションはありませんエラーの境界線に引っかかり、私はそれらを捕まえてログに記録する必要があります。イベントハンドラの処理に16エラーが発生しました

私が見つけた回避策はwindow.onerrorを使用していましたが、エラーに関する実際のデータがイベントに送信されないため、実際のエラーの詳細を「スワロー」するように見えます。

私たちが作成しているすべてのイベントブロックにtry/catchを使用することを含めないこのタイプの処理に関する提案はありますか?

ありがとうございます!

+0

状況を示すコード例は役に立ちます –

答えて

0

は、私たちが作成しているすべてのイベントブロックにtry/catchを使用することを含まないこのタイプの処理に関する提案はありますか?

要するに、あなたがtry/catchブロックを使用する必要があります。

これは、イベントハンドラ(および他の非同期操作)が非同期であり、エラー境界のrenderと同じイベントループの繰り返しで実行されないという単純な事実によるものです。

try { 
 
    setTimeout(() => { 
 
    throw new Error('my error outside the event loop') 
 
    }, 0) 
 
} catch (err) { 
 
    console.log('error catched!', err) 
 
}

ですから、レンダリング同期する必要があるとasync操作(この場合はイベントハンドラ):あなたはこのような何かを書いたかのように
は、だからあなたはここに求めて何を達成しようとすることですそれを行う方法の1つは、setStatetry/catchブロックです。
コードを試してみてstateにエラーを格納すると、再レンダリングが発生し、エラーを条件付きでレンダリングするか、この変更をリッスンして何かを記録することができます。このアプローチは便利ではありません。

+0

しかし、window.onエラーはどうですか?このイベントは、エラーが発生したときにトリガされますが、引数は取得されません。何故ですか? –

+0

コード例なしで手助けするのは難しい –

関連する問題