没有从生成器函数调用console.log

时间:2016-11-24 17:08:17

标签: javascript

我第一次在javascript中使用生成器函数并遇到一些有趣的问题。

代码:

fmap::(a -> b) -> f a -> f b

"测试2" console.log永远不会被调用。如果我没有将maxDate传递给生成器函数,它也不会引发错误。这一定是关于发电机的缺失。

编辑显示使用

import moment from 'moment';

export default function recur(quantity, units) {
  console.log('TESTING 1');

  function* recurGenerator(startDate, maxDate) {
    console.log('TESTING 2');

    if (maxDate === undefined) {
      this.throw('Argument maxDate is undefined');
    }

    let nextDate = moment(startDate).clone();
    maxDate = moment(maxDate);

    for (;;) {
      nextDate = moment(nextDate).clone().add(quantity, units);
      if (nextDate.isAfter(maxDate)) yield null;
      yield nextDate;
    }
  }

  return recurGenerator;
}

似乎需要调用next来在第一次收益之前运行代码吗?

1 个答案:

答案 0 :(得分:3)

在生成器函数中,第一个yield语句之前的代码会在生成器继续执行到该点之前执行:

let a = function * () {
  console.log(1);
  yield 2;
  yield 3;
} 

let b = a(); // no console output!
let c = b.next(); // prints 1 to the console
c // { value: 2, done: false }