代码之家  ›  专栏  ›  技术社区  ›  Shubhanu Sharma

如何使用相同的操作调用取消或更新saga轮询请求

  •  3
  • Shubhanu Sharma  · 技术社区  · 6 年前

    我想实现的是当我的页面呈现时,我想开始对分数进行轮询,在某些操作上,我将用其他一些查询参数调用相同的轮询(相同的api),这样我只想用新的参数更新相同的轮询。

    export function* pollScoreSnippets() {
      while (true) {
        try {
          const { data } = yield call(() => request(apis.GET_SCORE_API));
          yield put({
            type: types.DASHBOARD_DATA_FETCHED,
            payload: {
              type: ['scores'],
              data: {
                scores: { values: data.data },
              },
            },
          });
          yield call(delay, SCORE_SNIPPET_POLLING_DELAY);
        } catch (err) {
          yield put({
            type: types.DASHBOARD_DATA_FETCHING_ERROR,
            payload: {
              error: err.response.data,
            },
          });
          yield call(delay, SCORE_SNIPPET_POLLING_DELAY + 10);
        }
      }
    }
    
    export function* watchPollSaga() {
      while (true) {
        // console.log('watching');
        yield take(types.POLL_SCORE_SNIPPETS);
        yield race([call(dashGenerators.pollScoreSnippets), take(types.STOP_POLLING_SCORE_SNIPPETS)]);
      }
    }
    

    这对我很有用,但是使用这种方法,我必须再次调用cancel操作,然后再次调用相同的操作以重新启动轮询。

    如果我调用相同的操作,它会更新当前的轮询请求,或者取消或重新启动新的轮询请求,有没有办法

    有点:

    export function* watchPollSaga() {
      while (true) {
        // console.log('watching');
        yield take(types.POLL_SCORE_SNIPPETS);
        yield race([call(dashGenerators.pollScoreSnippets), take(types.POLL_SCORE_SNIPPETS)]);
      }
    }
    
    0 回复  |  直到 6 年前