如何使“ redux-saga”使用最新调度事件的结果?

时间:2019-02-19 05:06:05

标签: redux-saga

我有一个输入字段,每次更改value时,我都会调度一个事件以使用该值获取后端API。但是这些API的响应时间各不相同:较晚获取的API可能会在较早获取的API之前返回响应,这会使最后一个响应与最新值不对应。

我正在使用redux-saga中间件,并且想知道redux-saga是否提供了一种管理响应的方法,以便我可以使用与最新调度事件相对应的响应?

我需要立即分派操作,并按顺序处理响应。

1 个答案:

答案 0 :(得分:0)

您正在寻找的解决方案是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通道效果,如果saga尚未准备好接受动作(例如,在API调用中被阻止),则按照动作被分派的顺序(使用缓冲区)对动作进行排队。