2016-11-14 20 views
1

私は立ち往生しており、正しい方向に向けるためにいくつかのアドバイスを利用することができました。私は配列(コンテキストのために:チャートの配列)であり、配列の各項目は独自の状態を持っているストアを持っています。各項目はAPIをapi呼び出しにする責任がありますが、新しいエフェクトが起動されてapi呼び出しを行うと、以前のAPIコールをキャンセルし、以前のストリームをすべてキャンセルすることができます。どんな助けでも大歓迎です。ngrx effects - ストリームが完了する前に前のストリームをキャンセルしています

効果は、最終的な結果は、私の店は、次のようになります。この

@Effect() addCharts$ = this.actions$ 
    .ofType(LOAD_CHART) 
    .switchMap((action) => { 
     return this.chartApi.getChart(action.payload.url).map((res) => { 
      res.id = action.payload.id; 
      res.url = action.payload.url; 
      return res; 
     }); 
    }) 
    .map((result: any) => { 
     debugger; 
     return { 
      type: LOAD_CHART_SUCCESS, 
      payload: result 
     } 
    }) 
    .catch((error: any) => { 
     debugger; 
     return Observable.of({ 
      type: LOAD_CHART_FAILURE, 
      payload: error.detail 
     }); 
    }); 

のように見えます。

[ 
    { 
    id: 1, 
    data: null, 
    loading: true, 
    loaded: false 
    }, 
    { 
    id: 2, 
    data: { 
     ... 
    } 
    loading: false, 
    loaded: true 
    } 
] 

答えて

2

代わりに使用mergeMap(またはconcatMap、秩序を維持することが重要である場合)。のみ最近観測投影からの値を発光documentationswitchMap

プロジェクト観測出力にマージされた観測に各ソース値によれば、

したがって、各時間は効果がLOAD_CHARTアクションを受け取り、それが

+0

など、任意の現在のchartApi.getChartからスクライブ解除ありがとう!!!それはうまくいった! – MarkFromFullerton

関連する問題