根据停止操作中的参数取消轮询

时间:2019-07-19 16:04:30

标签: reactjs redux redux-saga

我要在同一sagaMiddleware.run函数上使用不同的watchStatus调用ids,这取决于需要监视其状态的不同对象。仅在ids匹配的情况下,我才需要开始和停止轮询。现在,当为STOP_POLLING调用id = 1时,它将停止对所有ids的轮询。我想检查id,然后仅停止相应的轮询器。

function* pollStatus(dispatch, statusUrl, id) {
    while (true) {
    try {
        const { data } = yield call(() => axios({ url: statusUrl }));
        yield put(updateStatus(id, data));
        yield delay(2000);
    } catch (err) {
        console.log(err);
        yield put(failedToUpdateStatus(id, err));
    }
    }
}

export const watchStatus = function* (dispatch, statusUrl, id) {
    while (true) {
        yield take(Actions.START_POLLING);
        yield race([
            call(pollStatus, dispatch,statusUrl, id),
            take(Actions.STOP_POLLING)
        ]);
    }
}

0 个答案:

没有答案