收益率被视为非阻塞性看涨期权?

时间:2016-12-20 00:48:12

标签: redux-saga

如果多次调度action1,这会被视为非阻塞还是第一次丢弃/丢失?

function* nonBlockingSaga () {
    while (true) {
        yield take('action1');
        yield take('action2');
        yield take('action3');
    }
}

1 个答案:

答案 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);
  }
}

这样你就不会错过任何行动。