2017-07-05 5 views
1

これは通常の方法です:wrapperでredux sagaエラーを処理する方法は?

function* saga1() { 
    try { 
    // do stuff 
    } catch (err) { 
    // handle err 
    } 
} 

function* saga2() { 
    try { 
    } catch (err) { 
    } 
} 

function* wrapper() { 
    yield [ 
    takeLatest('saga1', saga1), 
    takeLatest('saga2', saga2), 
    ]; 
} 

これは期待ウェイです:

function* saga1() { 
} 

function* saga2() { 
} 

function* wrapper() { 
    try { 
    takeLatest('saga1', saga1), 
    takeLatest('saga2', saga2), 
    } catch (err) { 
    // handle errors 
    } 
} 

は、エラーを処理するために上記の方法を達成するために、とにかくはありますか?通常の方法を使用して、同じエラーを繰り返し処理することがあります。

+0

ここで還元するのは初めてですが、 '*'はこの行では何を意味するのか分かりますか? 'function * saga1(){'? –

+1

*はジェネレータ関数を意味します –

+1

@PardeepJainこれは 'redux'ではなく' redux-saga'ではなく、ES6ジェネレータのものです。 – Kim

答えて

1

このケースの最も簡単な方法は、佐賀で並列ダイナミックエフェクトを使用する場合のフォークです。もちろん、実際のスレッドではありませんが、非同期操作のシーケンスを書き込む方法です。

例を深く見てみましょう。 yield [ takeA(), takeB() ]のような構成では、A & B操作を、指定されたコールバックを使用してsagaワークフローに委任することが前提です。言い換えれば、この時点でラッパーの実行が行われるため、try/catchは適切ではありません。

代わりに、forkを2つ以上の独立したサガプロセスの並列ダイナミックエフェクトとして使用し、その中で無限ループを作成できます。

コード:もちろん

function* proc1() { 
    while(true) { 
    yield call(() => new Promise(resolve => setTimeout(resolve, 1500))); 
    throw new Error('Err1') 
    } 
} 

function* proc2() { 
    while(true) { 
    yield call(() => new Promise(resolve => setTimeout(resolve, 2000))); 
    throw new Error('Err2') 
    } 
} 

function* watchLoadRequest() { 
    try { 
    yield [call(proc1), call(proc2)] 
    } catch(err) { 
    console.log('@@[email protected]@', err); 
    } 
} 

、あなたはパラレルの手順でカスタムビジネスログインを実装する必要があります。それらの間に永続/共有状態が必要な場合は、適切なフィールドにobject引数を使用します。

関連する問題