从节点JS中的生成器获取返回值

我似乎无法弄清楚如何获得发电机的返回值 – 任何人都知道我在做什么错了?

function getGeneratorReturn() { var generator = runGenerator(); var generatorReturn = null; var done = false; while(!done) { var currentNext = generator.next(); console.log('Current next:', currentNext); generatorReturn = currentNext.value; done = currentNext.done; } return generatorReturn; } function* runGenerator() { var a = yield 1; var b = yield 2; var c = a + b; return c; } var generatorReturn = getGeneratorReturn(); console.log(generatorReturn); // Should output 3, is outputting NaN 

注意:您将需要使用–harmony选项运行的节点0.11.12运行此代码。

       

网上收集的解决方案 "从节点JS中的生成器获取返回值"

currentNext.donetruecurentNext.value具有返回值。

你可以写你的循环为:

 var next; while (!(next = generator.next()).done) { var yieldedValue = next.value; } var returnValue = next.value; 

当我调用.next时,似乎通过将当前值传递回生成器来工作:

 function getGeneratorReturn() { var generator = runGenerator(); var generatorReturn = null; var done = false; while(!done) { var currentNext = generator.next(generatorReturn); console.log('Current next:', currentNext); generatorReturn = currentNext.value; done = currentNext.done; } return generatorReturn; } function* runGenerator() { var a = yield 1; var b = yield 2; var c = a + b; return c; } var generatorReturn = getGeneratorReturn(); console.log(generatorReturn); // Should output 3, is outputting NaN 

注意:您将需要使用–harmony选项运行的节点0.11.12运行此代码。

生成器函数不能return值。 相反,一个生成器函数会自动被一个Iterator实例包装,这个实例被返回。

由于生成器函数总是asynchronous执行的(由yield语句触发,甚至通过使用Iterator.next( value)手动注入值Iterator.next( value)return语句只能用于closures生成器函数中返回的Iterator码。

您只能使用yield从发生器函数“返回”值。