nodejs generator:为什么console.log(foo)未定义

时间:2015-12-03 03:00:01

标签: node.js

像这样的代码:

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.

1 个答案:

答案 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) 
相关问题