是否可以测试频道是否为空。
我这样做:
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();
无论如何从通道获取缓冲区,所以我不必将缓冲区保存在变量中?