私は約束を返すリソースローダー関数を作成しています。関数は、エラーログを行います。Howtoは約束を拒否し、履行チェーンを停止する?
function load(url) {
return request(..)
.catch(function(error) {
log(error);
throw error;
});
}
機能は、様々なチェーンで使用されます。
load(a).then(function(res1) {
load(b).then(function(res2) {
// res1 + res2
});
});
私はリソース例外をログに記録し、そこに約束チェーンを停止することができるようにしたいと思います。私がそれを沈黙させるとチェーンはthen
につながります。もし私が再び投げれば、それは未処理の拒絶であることが判明します。 ノードのprocess
を介してそれらをグローバルに取得することは、プラットフォーム上の他のライブラリが依存する可能性があるため、オプションではありません。
拒否反応を抑止しても、履行チェーンが続かないようにすることはできますか?
「未処理の拒否」を止めるためにチェーンに最終的なキャッチを追加します - しかし、私が見た限り、未処理の拒否はコード実行に影響を与えません。これは非同期とにかく "停止"したいコードのチェーン - この重要でないコンソールエラーを防ぐ必要がある何らかの理由はありますか?編集:ちょうど実現、これはnodejsの質問です - ごめんなさい –
unhandledRejectionイベントは、そうでなければ飲み込まれるエラーを記録するためにあります。それはプログラミングフックとして意図されていません。それに応じて他のコードを心配する必要はありませんが、クリーンアップする必要があります。 "このような失敗に対処するには、操作不可能な.catch(()=> {})ハンドラがresource.loadedにアタッチされ、 'unhandledRejection'イベントが発生しないようにすることができます。 – teppic