首页 > 解决方案 > 当它总是正确的时候为什么要使用while?

问题描述

我看到 redux-saga 中的大多数示例都使用while(true){}

function* watcherSaga(){
  while (true) {
    yield something()
  }
}

我们不能简单地写吗?

function* watcherSaga(){
  yield something()
}

或者,有什么不同吗?

标签: javascriptecmascript-6generatorredux-sagayield

解决方案


看看下面的例子。一个生成器永远不会“完成”,而另一个生成器在第一个(也是唯一一个)yield 之后完成。

function something() {
  return Math.random();
}

function* watcherSaga1() {
  while (true) {
    yield something();
  }
}

function* watcherSaga2() {
  yield something();
}

const watcher1 = watcherSaga1();
const watcher2 = watcherSaga2();

console.log('watcher1: ', watcher1.next());
console.log('watcher1: ', watcher1.next());
console.log('watcher1: ', watcher1.next());

console.log('watcher2: ', watcher2.next());
console.log('watcher2: ', watcher2.next());
console.log('watcher2: ', watcher2.next());


推荐阅读