我正在阅读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/

10-11 06:40