2017-09-15 15 views
1

私はリアクションプログラミングにはかなり慣れており、次のコードをredux-sagaからredux-observableに翻訳したいと考えています。redux-sagaをredux-observableに変換する

アイデアは、API呼び出しを待ってから5秒待って別のアクションをディスパッチすることです。ここで

function* mySaga(action) { 
    const response = yield call(someApiCall); 
    yield call(delay, 5000); 
    yield put({ type: 'ACTION' }); 
} 

は、私はReduxの-観測可能でそれを行っていた方法は次のとおりです。

action$ 
    .ofType('SOME_ACTION') 
    .mergeMap(someApiCall) 
    .delay(5000) 
    .map(() => ({ type: 'ACTION' })) 

答えて

2

あなたの翻訳は、あなたがあなたの元の例ではyield takeEvery('SOME_ACTION', mySaga)ものを省くと仮定し、正確です。

しかしObservableチェーンを隔離することをお勧めします。 mergeMap内、someApiCall()後に適用するためにすべてのものを置く:

action$ 
    .ofType('SOME_ACTION') 
    .mergeMap(action => 
    someApiCall() 
     .delay(5000) 
     .map(() => ({ type: 'ACTION' })) 
) 

あなたやチームメンバーが後に来て、それの重要なあなたドンをエラー処理を追加しようとした場合、それは、あなたの例には機能的な違いはありませんにもかかわらず、 「TはmergeMap外のエラーバブルましょう:あなたはmergeMap後、トップレベルで観測上catchを置いていた場合

action$ 
    .ofType('SOME_ACTION') 
    .mergeMap(action => 
    someApiCall() 
     .delay(5000) 
     .map(() => ({ type: 'ACTION' })) 
     .catch(error => Observable.of({ 
     type: 'SOME_ACTION_FAILED', 
     payload: error 
     })) 
) 

を、誤りだろうトップレベルのチェーンに、あなたがキャッチだろうが、バブルあなたの叙事詩はもはや未来を聞いていないでしょう 行動。

理由がわからない場合は、Observables +の演算子の仕組みについてもっと学習することをお勧めします。私は恐ろしいことではないと約束します。ここでは、正しい点でエラーを捕捉するために「観測可能な鎖を分離する」ことに触れる素晴らしいビデオがあります。 https://youtu.be/3LKMwkuK0ZE?t=20m15s

+0

優れたビデオリソース、ありがとう! – amaurymartiny

関連する問題