我有一个输入字段,每次value
更改时,我都会调度一个事件来使用该值获取后端API。但API的响应时间各不相同:后来获取的API可能会在之前获取的API之前返回响应,这使得最后一个响应不对应于最新值。
我正在使用redux-saga
中间件,并想知道redux-saga
是否提供了一种管理响应的方法,以便我可以使用与最新调度事件相对应的响应?
我需要立即调度操作,并按顺序处理响应。
你正在寻找的解决方案是redux-saga channels效果和buffers
TL:DR
import { buffers } from 'redux-saga'
import { take, actionChannel, call, ... } from 'redux-saga/effects'
function* watchActions() {
// 1- Create a channel for queueing actions
const actionsChannel = yield actionChannel('REQUEST', buffers. expanding(5))
while (true) {
// 2- Blocks the Saga until a message is available on the channel
const {payload} = yield take(actionsChannel)
// 3- Note that we're using a blocking call
yield call(handleRequest, payload)
}
}
function* handleRequest(payload) { ... }
说明:上面的代码使用redux-saga通道效果按照已调度的顺序(使用缓冲区)对操作进行排队(如果传奇尚未准备好接受它们(例如,在API调用时被阻止)。