首页 >社区问答列表 >javascript - ES6的generate问题

javascript - ES6的generate问题

在学习ES6的generate,下面例子为什么不能打印,还会报错?
如何修改?

我是应该执行gen()还是gen.next()

var fs = require('fs');

var readFile = function (fileName) {
  return new Promise(function (resolve, reject) {
    fs.readFile(fileName, function(error, data) {
      if (error) reject(error);
      resolve(data);
    });
  });
};

var gen = function* () {
  var f1 = yield readFile('../test/1.json');
  var f2 = yield readFile('../test/2.json');
  console.log(JSON.stringify(f1));
  console.log(JSON.stringify(f1));
};

//gen()
console.log(gen.next())

  • 伊谢尔伦
  • 伊谢尔伦    2017-06-12 09:24:082楼

    generate function调用后返回的是一个generate对象
    而且generate.next返回的也是一个对象,包含了value和done两个属性
    所以应该这么调用

    let g = gen()
    console.log(g.next()) //{ value: ..., done: false }

    +0添加回复

  • 回复
  • typecho
  • typecho    2017-06-12 09:24:081楼

    //返回一个Iterator指针,还没开始执行
    const g = gen();
    //执行 readFile('../test/1.json');
    g.next();
    //执行 readFile('../test/2.json');
    //下面没有yield,所以会一直执行下去
    g.next();

    +0添加回复

  • 回复