我想实现的是当我的页面呈现时,我想开始对分数进行轮询,在某些操作上,我将用其他一些查询参数调用相同的轮询(相同的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)]);
}
}