2017-10-27 6 views
0

私はChromeにいると言います。私はこれを行う:ネイティブの解決関数がスローできますか?

new Promise(function (resolve, reject) { 
    // ... do some work 
    resolve('foo'); 
}).then(doStuff).then(doMoreStuff); 

'解決'への呼び出しは例外をスローすることはできますか?何かdoStuffかdoMoreStuffができることは、それは '解決'例外をスローするだろうか?

+1

番号へのコールの周りにtryを配置する必要があります。したがって、doStuffまたはdoMoreStuffで発生することは、状態を解決済みから拒絶済みに変更することはできません。 –

+0

'doStuff'および' doMoreStuff'は** resolve'が呼び出された後に**実行されません。 javascriptで時間旅行はありません:p –

+0

「解決する」というだけで「フラグを設定して返されました」か、代わりに「フラグを設定して、そのフラグがセットされるのを待っていた作業" – Bruce

答えて

0

doStuffまたはdoMoreStuffが例外をスローすると、関数の本体ではなく.then()の呼び出しのコンテキストでスローされます。 .then()が呼び出されるまでに、その関数が返されました。そこのコードは非同期に実行されます。

あなたは例外をキャッチしたい場合は、あなたが約束が解決されず、二度とそれに状態を変更された解決を呼び出す場合doStuff

new Promise(function (resolve, reject) { 
    // ... do some work 
    resolve('foo'); 
}).then(x => { 
try { 
    doStuff(x); 
} catch (e) { 
    console.log("Error in doStuff"); 
}).then(doMoreStuff); 
+0

'dostuff'がエラーを投げると、このキャッチではキャッチされません。あなたは未処理の拒否で終わるでしょう。例えば ​​'let doStuff =()=> {throw(新しいエラー("おっとり "))}'何が起こるのですか? –

+0

あなたはそうです、 '.then()'は非同期に実行されることを忘れていました。 – Barmar

関連する問題