【问题标题】:How to group requests in redux-saga如何在 redux-saga 中对请求进行分组
【发布时间】:2018-03-16 04:49:54
【问题描述】:

我需要为多个图表加载数据。我还想仅在图表设置更改 (distinctUntilChanged) 并删除较旧的请求(不再反映当前设置 - 这就是 switchMap 所做的)时发送请求。在rxjsredux-observable 中,它看起来像这样:

export const chartsEpic = action$ =>
  action$
    .ofType('CHART_DATA_REQUESTED')
    // group actions by chart id...
    .groupBy(action => action.meta.chartId)
    // ...and for each chart:
    .map(actionsByChart$ =>
      actionsByChart$
        // continue only if settings change
        .distinctUntilChanged((a1, a2) => compare(a1.payload.settings, a2.payload.settings))
        // load data, but drop old requests when we get new settings
        .switchMap(action => 
          Observable.fromPromise(fetchChartData(action.payload.settings))
            .map(data => ({type: 'CHART_DATA.SUCCESS', payload: data, meta: action.meta))
            .catch(error => Observable.of({type: 'CHART_DATA.FAILURE', payload: error, meta: action.meta}))
        )
    )
    // combine actions for all charts into one output stream
    .mergeAll();

redux-saga 中的可比代码是什么?

【问题讨论】:

    标签: javascript reactjs redux redux-saga redux-observable


    【解决方案1】:

    实现它的通用方法:

    function* syncChartsFlow(){
         var fetchTask = null;
         while(true){
              yield take([INITIAL_FETCH, SETTINGS_CHANGED])
              if(fetchTask){
                  yield cancel(fetchTask)
              }
              fetchTask = yield fork(fetchChartsInfo)
         }
    }
    
    function* fetchChartsInfo(){
      // fetch info here
    }
    

    【讨论】:

    • 但这只是一张图表,对吗?它不处理每个图表的请求分组。
    猜你喜欢
    • 2017-05-21
    • 2019-06-05
    • 2020-07-03
    • 1970-01-01
    • 2020-07-08
    • 2019-12-09
    • 2018-04-23
    • 2017-12-01
    • 1970-01-01
    相关资源
    最近更新 更多