var compute = function* (a, b) {
var foo = yield a + b;
console.log(foo);
};
var generator = compute(4, 2);
generator.next();
generator.next();
然后运行此代码(node generatortest.js),我得到结果“undefined”。我想知道为什么结果是未定义但不是6.
答案 0 :(得分:0)
第一个generator.next()启动生成器,直到它在第一个yield上暂停。 yield表达式的值为6,它被加载到返回对象中{value:6,done:false}
第二个generator.next()恢复yield的完成,因为你没有传递任何参数,所以foo现在是未定义的。生成器运行到结束并使用{value:undefined,done:true}
加载next()返回对象所以要获得你想要的东西,你需要将第一个next()的返回值提供给第二个next():
var generator = compute(4, 2)
var bar = generator.next().value
generator.next(bar)