redux-saga takeLatest取消挂起的请求

时间:2018-12-21 13:50:48

标签: redux-saga abort livesearch autorepeat

我使用redux-saga takeLatest运行了LiveSearch。每次用户在字段中键入char时,都会启动新的API调用。

如果用户按住某个键,则会发生AutoRepeat并启动许多API调用。调试器显示它们变为待处理状态,并最终完成(200)响应数据。

因此AutoRepeat确实可以重击服务器。客户端也开始爬网,因为直到用户释放密钥后才会显示AutoRepeated字符。

我想减少由AutoRepeat引起的客户端和服务器上的负载。一些可能性是:-

1个redux-saga在网络级别取消了不必要的待处理请求 2个Redux-Saga节流阀请求 3在输入onChange / action方法上发生某种超时

哪个是最佳选择,如何?

下面是我的Saga代码

function addressLiveSearch(strName, strNbr) { // {"addr":{"strName":"Stor"}}
    const url = __API__ + '/secure/addressLookup'
    let payload = {}
    if (strNbr.length > 0) {
        payload = { "addr": { strName, strNbr } }
    } else {
        payload = { "addr": { strName } }
    }
    return axios.post(url, payload, { headers: { 'Accept': 'application/json' } })
}

function* pickUpLiveSearchSaga({ strName, strNbr }) {
    try {
        const response = yield call(addressLiveSearch, strName, strNbr)
        const { data } = response
        yield put(Actions.pickUpLiveSearchSucceded(data))
    }
    catch (err) {
        console.log('pickUpLiveSearchSaga catch ' + err)
        if (err.response && err.response.status == "401" && err.data == undefined) { // unauthorized
            yield put(Actions.logout())
        }
        if (err.hasOwnProperty("message")) {
            yield put(Actions.pickUpLiveSearchFailed(err.message))
            return
        }
        yield put(Actions.pickUpLiveSearchFailed("Unknown network error"))
    }
}

0 个答案:

没有答案