Я опрашиваю API с задержкой и отменой, используя условие гонки.
Чего я хочу добиться - это когда моя страница рендерится, я хочу начать опрос на предмет результатов, и в некоторых действиях я вызову тот же опрос (тот же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)]);
}
}
Это работает для меняно при таком подходе я должен вызвать действие отмены, затем снова то же самое действие для повторного запуска опроса.
Есть ли способ, если я вызову то же действие, и он обновит текущий запрос опроса или отменит или перезапустит сновый запрос
что-то вроде:
export function* watchPollSaga() {
while (true) {
// console.log('watching');
yield take(types.POLL_SCORE_SNIPPETS);
yield race([call(dashGenerators.pollScoreSnippets), take(types.POLL_SCORE_SNIPPETS)]);
}
}