2016-10-21 3 views
2

ネストされたコールバックに関してtry/catchを使用する方法を理解しようとしています。なぜこのコードが私の新しいエラーをキャッチしないのですか?tryキャッチブロックがネストされたコールバックをキャッチしていない

function test(cb) { 
 
    setTimeout(function() { 
 
    throw new Error("timeout Error"); 
 
    }, 2000); 
 
} 
 

 
try { 
 
    test(function(e) { 
 
    console.log(e); 
 
    }); 
 
} catch (e) { 
 
    console.log(e); 
 
}

答えて

7

機能がsetTimeout実行に渡されたときにエラーが、非同期的に起こります。エラーがスローされるまでに、test関数はすでに実行を終了しています。

+0

どのようにして非同期エラーをキャッチしますか? – runners3431

+1

@ runners3431 https://ruben.verborgh.org/blog/2012/12/31/asynchronous-error-handling-in-javascript/ – stuartd

+0

これを行うにはいくつかの方法があります。 'try' /' catch'ブロックをsetTimeoutに渡された関数に移動して、 'catch'ブロックから呼び出せる' test'関数にエラーコールバックを提供することができます。 –

関連する問題