2015-09-24 9 views
5

Chromeで開発ツールが表示され、Promiseが拒否された場合、Chromeは「約束を拒否しました」というメッセージでjavascriptの実行を一時停止します。この場合、Chromeが一時停止することを何らかの方法で防止できますか(まだdevtoolsを開いていますか)。Chrome(v45)が約束の拒否で一時停止することを防止できますか?

拒否された約束は私のアプリケーションの「通常の」フローの一部であり、発生するたびにChromeのレジュームボタンを押すのは不便です。

あなたはJS-コンソールで次のように入力してChromeでこの動作をテストすることができます。

new Promise(function(accept, reject) { reject(); }) // (tested in v 45.0.2454.99) 

感謝を。

答えて

12

Chromeは、[ソース]タブで[未キャッチの例外で一時停止する]をオンにした場合にのみこれを行います。

enter image description here

あなたはそれを外します場合は、エラー時に一時停止しません。

約束拒否は、という概念的には誤りです。精神的にモデル化するのは正しい方法ですが、それ以外の場合はサイレントエラーです。

Promise.resolve().then(function(){ 
    JSON.prase("{}"); // unhandled rejection, TypeError, typo 
    foooooo = 15; // unhandled ReferenceError, undefined 
}); 

などです。約束して

try { 
    doSomething(); 
} catch(e){ 
    // explicitly ignore all errors. 
} 

doSomething().catch(function(){}); // explicitly don't report rejection 
明示的に同期に似て拒絶反応を抑制したい場合

あなたは同期コードで行うのと同じことを行うだろう「すべてのキャッチ」

+2

ありがとう、それは私のトラブルのほとんどを解決しました。ただし、「すべてをキャッチする」と設定すると、「例外時に一時停止」が有効な場合でもChromeは一時停止します。 –

+0

@MikaelSundbergそれは間違いなくバグだ、私はdevtoolsチームから友人に連絡し、それを分類する。ありがとう。 –

+0

https://code.google.com/p/chromium/issues/detail?can=2&q=promises%20devtools%20rejection&colspec=ID%20Pri%20M%20Stars%20ReleaseBlock%20Cr%20Status%20Owner%20Summary%20OS%20Modified&id = 535452&thanks = 535452&ts = 1443081694 –

関連する問題