2016-07-27 3 views
0

ブルーバードコルーチンのエラーをどのように処理すると思いますか?bluebirdjsコルーチンエラー処理(ブラウザ)

私はノードでcoを使っていましたが、これは素晴らしいキャッチ関数を持っています。

co(function*() { 

    return new Promise(function(resolve, reject) { 
     // whatever stuff 
    }); 

}).catch(function(err) {console.error(error.stack)}); 

しかし、ブラウザ/クライアント側のブルーバードでは、全体の悪夢です。キャッチ機能はなく、私が戻ってきているエラーは全くありません。匿名でも未処理でも、全脳になります...

私はbluebirdjsのウェブサイトをチェックしています。数か月前にエラーを処理するさらに、誰かが次のように書きました。

try、catch、および最後にコルーチンを使用する利点を強調するよりよい例があります。

http://bluebirdjs.com/docs/api/promise.coroutine.html

私は意味:キャッチは最終的にコルーチンにネストされ、してみてください?私は、私は2つのルーチンのためのそのアドバイスに従っていることを認めているが、私はちょうど正しいとは思わない。約束とコルーチンの全体のポイントは、コールバックが作成した醜い過度のネスティングを取り除くことです。ああ、またか?

このBluebirdjsエラーがどのようにしてより良い解決策に変わる可能性があるのか​​誰かが知っていれば、私は本当に感謝しています。

+0

「Promise.coroutine' == 'co.wrap'」のようなエラーを処理できます。両方とも 'catch'メソッドを持つ約束を返す関数を返します。 – Bergi

+0

@Bergi愚かな私、あなたは正しいです。私はこの * Promise.coroutine(/ *発電機のもの* /)。キャッチ(ハンドラ)* 代わりの * Promise.coroutine(/ *発電機のスタッフ* /)のようなinvokation前にキャッチを設定しようとしました。() .catch(ハンドラー)* – LongHike

答えて

0

coがブルーバードPromise.coroutineの場合、自動的にエラーが伝播され、未処理の拒否が記録されます。

未処理のエラーが記録されます。

Promise.coroutine(function*() { 
    try { 
     doSomething(); 
     yield doSomethingAsync(); 
    } catch (e) { 
     // handle error 
    } 
})(); 
+0

もちろん、あなたの答えは正しいです。しかし、事はそうであるべきではありません。私はすでにdoSomethingAsyncでエラーが検出されているので、コルーチンのもう1つのtry/catchブロックは必要ないはずです。 – LongHike

+0

そうですね、それは実際にそのように働きます - あなたは何か違った経験をしましたか? –

関連する問題