我正在阅读redux-saga频道文档。我遇到的代码:
export function* saga() {
const chan = yield call(countdown, value)
try {
while (true) {
let seconds = yield take(chan)
console.log(`countdown: ${seconds}`)
}
} finally {
if (yield cancelled()) {
chan.close()
console.log('countdown cancelled')
}
}
}
如您所见,这是一个永远不会结束的无限循环,您应该调用break或throw和exception。但是在上面的示例中,情况并非如此。在调用函数上方或内部的代码中不会引发中断或异常。上面的无限循环如何结束并到达finally块?
参见:http://yelouafi.github.io/redux-saga/docs/advanced/Channels.html
最佳答案
该行似乎在某些调用时引发异常
yield take(chan)
它通过自身产生返回值,因此根本没有无限循环。
更新:有关产量如何工作的更多详细信息,请参见此处https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/yield
关于javascript - 如何在没有break语句的情况下结束while(true)循环?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38681805/