2016-11-14 66 views
1

我被卡住了,可以使用一些建議讓我指出正確的方向。我有一個數組的商店(上下文:圖表數組),數組中的每個商品都有自己的狀態。每個項目負責將api調用爲api調用,但是當觸發新的效果並進行api調用時,它將取消先前的api調用,並從我可以告訴的部分中刪除前一個流。任何幫助是極大的讚賞。ngrx效果 - 流在完成之前取消之前的流

效果看起來像這樣

@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動作時間,從任何當前chartApi.getChart退訂等

+0

謝謝!工作! – MarkFromFullerton

相關問題