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"))
}
}