如何采取阻塞调用分派的多个操作
How to take multiple actions dispatched with blocking call
我有一个传奇正在听一个动作。
当此操作被调度时,它会执行阻塞调用。
问题是很多动作(相同的动作)是同时发送的,而我的 saga 无法执行所有动作。但是我需要同步处理每个动作。
我知道这是 redux-saga 文档中的一个已知问题:My Saga is missing dispatched actions
但事实是我不能使用 fork,因为我确实需要在处理新调用之前结束之前的调用。
这是我的代码:
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);
}
}
}
有人有解决办法吗?
您可以创建缓冲操作通道并从中执行操作。
export function* readProducts() {
const addProductRequests = yield actionChannel(RFID__ADD_PRODUCT);
while (true) {
const {
payload: { tags },
} = yield take(addProductRequests);
// sequential add of each item
for (const tag of tags) {
yield call(addProductViaRfid, tag);
}
}
}
我有一个传奇正在听一个动作。 当此操作被调度时,它会执行阻塞调用。
问题是很多动作(相同的动作)是同时发送的,而我的 saga 无法执行所有动作。但是我需要同步处理每个动作。
我知道这是 redux-saga 文档中的一个已知问题:My Saga is missing dispatched actions
但事实是我不能使用 fork,因为我确实需要在处理新调用之前结束之前的调用。
这是我的代码:
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);
}
}
}
有人有解决办法吗?
您可以创建缓冲操作通道并从中执行操作。
export function* readProducts() {
const addProductRequests = yield actionChannel(RFID__ADD_PRODUCT);
while (true) {
const {
payload: { tags },
} = yield take(addProductRequests);
// sequential add of each item
for (const tag of tags) {
yield call(addProductViaRfid, tag);
}
}
}