我第一次在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来在第一次收益之前运行代码吗?
答案 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 }