【发布时间】:2019-11-21 11:03:20
【问题描述】:
我有一个 saga 正在听一个动作。 当这个动作被调度时,它会执行一个阻塞调用。
问题是同时调度了很多动作(相同的动作),而我的 saga 不能采取所有的动作。但是我需要同步处理每个动作。
我知道这是 redux-saga 文档中的一个已知问题:My Saga is missing dispatched actions
但事实是我不能使用分叉,因为我确实需要在处理新的调用之前结束之前的调用。
这是我的代码:
export function* readProducts() {
while (true) {
const {
payload: { tags },
} = yield take(RFID__ADD_PRODUCT);
// sequential add of each item
for (const tag of tags) {
yield call(addProductViaRfid, tag);
}
}
}
有人有解决办法吗?
【问题讨论】:
-
我认为你应该阅读这个 redux-saga.js.org/docs/advanced/Channels.html ,尤其是它使用
channel和buffers来保存传入请求的最后一部分。像这样,@ 987654326@ 我已经处理了与您的情况非常相似的情况,但我的是将一些块上传到服务器。我认为这将是相同的方法。 -
是的,这正是我所需要的!我认为我不需要缓冲区,但 actionChannel 正是它,谢谢,我得到的第一个答案就是这样 ;)
标签: javascript ecmascript-6 redux redux-saga