redux-saga take Последние запросы на отмену ожидающих

У меня есть рабочий LiveSearch, использующий Redux-Saga TakeLatest. Каждый раз, когда пользователь вводит символ в поле, запускается новый вызов API.

Если пользователь удерживает клавишу нажатой, происходит автоповтор и запускается множество вызовов API. Отладчик показывает, что они ожидают и в конечном итоге завершают (200) с данными отклика.

Так что AutoRepeat действительно забивает сервер. Клиент также начинает сканировать, поскольку автоматически повторяющиеся символы не отображаются до тех пор, пока пользователь не отпустит ключ.

Я хотел бы уменьшить нагрузку на клиент и сервер, вызванную AutoRepeat. Некоторые возможности: -

1 redux-saga отменяет ненужные отложенные запросы на сетевом уровне. 2 redux-saga регулирует запросы. 3 Какой-то тайм-аут при входном методе onChange/action.

Какой вариант лучше и как?

Ниже мой код саги

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 ответов

Другие вопросы по тегам