从节点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运行此代码。
当currentNext.done
为true
, curentNext.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
从发生器函数“返回”值。