测试通道是否为空(从通道获取缓冲区?)

时间:2018-02-10 08:16:55

标签: redux-saga

是否可以测试频道是否为空。

我这样做:

function* watchRequests() {
  const requestChan = yield call(channel)
  requestChan.put({ type:'REQUEST', ... })
  while (true) {
      const action = yield take(requestChan);
      // i want to test if requestChan is empty and break
  }
}

我目前正在思考,我必须做一个yield flush(channel)然后如果它返回一些东西,然后将它们全部放回到频道。这是唯一的方法吗?

const msgs = yield flush(channel);
if (actions.length) {
    for (const msg of msgs) {
        channel.put(msg);
    }
}

编辑:

我发现了另一种方式。如果我保存使用的缓冲区,我可以在缓冲区上测试isEmpty(),如下所示:

const buf = buffers.expanding(1);
const chan = yield call(channel, buf);

const isEmpty = buf.isEmpty();

无论如何从通道获取缓冲区,所以我不必将缓冲区保存在变量中?

0 个答案:

没有答案