2017-02-16 9 views
1

まず、この素晴らしいライブラリの多くの小道具!私はまだユースケースに苦しんでいます。私は別の叙事詩を最初に呼び出して、現在の叙事詩を続ける前に完了するまで待っています。ユーザーが物事を変えることができるフォームがあるとしましょう。他のデータをフォームにロードする前に、まず現在の変更を保存します。これについての考えは?他の叙事詩の中から叙事詩を呼び出す

答えて

3

あなたが好きなように聞こえます:ある叙事詩が別の叙事詩を蹴り出したい場合は、 が完了するまで待ってください。

1つのアプローチは(擬似名を使用して)、最初のアクションLOAD_OTHER_DATAを受け取るとただちに1つのSAVE_FORM_FULFILLEDのリッスンを開始します。これはフォームが保存されたことを通知します。受け取った場合、mergeMap(またはswitchMap、この場合は関係ありません)は、他のデータloadOtherDataSomehow()をロードして通常のビジネスを行うという呼び出しになります。最後に、私たちが待っているフォームの実際の保存を開始するトリックは、チェーン全体の最後にstartWith()を追加することです。フォームを実際に保存するアクションを発行してディスパッチします。

const saveFormEpic = (action$, store) => 
    action$ 
    .ofType('SAVE_FORM') 
    .switchMap(() => 
     saveFormSomeHow(store.getState().formDataSomewhere) 
     .map(details => ({ 
      type: 'SAVE_FORM_FULFILLED' 
     })) 
    ); 

const loadOtherDataEpic = action$ => 
    action$ 
    .ofType('LOAD_OTHER_DATA') 
    .switchMap(() => 
     action$.ofType('SAVE_FORM_FULFILLED') 
     .take(1) // don't listen forever! IMPORTANT! 
     .mergeMap(() => 
      loadOtherDataSomeHow() 
      .map(otherData => ({ 
       type: 'LOAD_OTHER_DATA_FULFILLED', 
       payload: otherData 
      })) 
     ) 
     .startWith({ 
      type: 'SAVE_FORM' 
     }) 
    ); 

あなたの読み込みと保存の動作については言及していないので、これはユースケースに合わせて修正する必要がある疑似コードです。

+0

徹底的な回答をいただきありがとうございます!これに加えてもう少し小さな質問がありますか?保存はオプションです。「ユーザーがそれを自分で保存していない場合、私は叙事詩が彼のためにそれをやりたがっています。だから私はObserver.if()メソッドを見て、それが収まるように見えますが、私は "loadOtherDataEpc"でオプションでそれを行うことが分かりません。 – robinvdvleuten

+0

単純なif/else条件を使用してください – jayphelps

+0

https://gist.github.com/jayphelps/7e708b59c17b4f327558e7e4501a0536 – jayphelps

関連する問題