如果多次调度action1,这会被视为非阻塞还是第一次丢弃/丢失?
function* nonBlockingSaga () {
while (true) {
yield take('action1');
yield take('action2');
yield take('action3');
}
}
答案 0 :(得分:2)
是的,如果您发送action1
,该传奇将被take('action2')
阻止,您将错过任何action1
个动作,直到该传奇循环播放。要解决此问题,您可以使用action channel。一个动作通道允许你缓冲动作,直到你的传奇准备好接受它们。
因此,在您的示例中,这将导致:
function* nonBlockingSaga () {
const channel1 = yield actionChannel('action1');
const channel2 = yield actionChannel('action2');
const channel3 = yield actionChannel('action3');
while (true) {
yield take(channel1);
yield take(channel2);
yield take(channel3);
}
}
这样你就不会错过任何行动。