普通函数内部的nodejs调用生成器函数

时间:2018-06-21 13:17:53

标签: node.js function generator

我有2个函数:一个生成器函数和一个正常函数(不带*)。生成器功能(示例):

function* generator(i) {
  yield i;
  yield i + 10;
}

和正常功能:

function normal(param) {
  var variable = 1;

  // yield generator function 
}

我知道无法在普通函数内部产生,但是如何调用生成器?我是否必须使用Promises或类似的东西?如果必须是Promise,那么它应该是什么样子?我试图这样做:

new Promise((resolve) => {
  var result = generator(3);

  Promise.all(result);
});

但这给我一个错误

反之亦然吗?例如,如果我需要在生成器中调用普通函数?

3 个答案:

答案 0 :(得分:1)

您可以使用GeneratorFunction中的next函数转到下一个yield语句。

看看文档-https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function *

function* generator(i) {
  yield i;
  yield i + 10;
}

const g = generator(10);
let result = g.next();
while (!result.done) {
    console.log(result.value)
    result = g.next();
}

答案 1 :(得分:1)

您可以在生成器函数上使用next()方法,如下所示:

function* generator(i) {
  yield i;
  yield i + 10;
}

function higherLevel (){
  let gen = generator(1).next();
  return gen
}

console.log(higherLevel());

这样,您可以在另一个函数中获取yield的下一个值。

答案 2 :(得分:0)

如果您想全部打印它们,使用 await for 语法更容易,如下所示:

function * generator(i) {
  yield i;
  yield i + 10;
}

(async function printGenerator() {
  for await (const item of generator(3)) {
    console.log(item);
  }
})();

输出是

3
13