Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
402 views
in Technique[技术] by (71.8m points)

有关 Generator 的自动执行器问题?

阮一峰 ES6 教程里的例子,我知道自动执行器里的 next 函数会作为回调函数传入 Thunk 函数返回的函数里,一直递归调用,可是 err, data 这种参数形式只能适用于操作 fs.readFile,如果我要操作其他函数就失效了,总不能为每个操作都写个自动执行器吧,co 模块又是怎么解决这个问题的呢。

function run(fn) {
  var gen = fn();

  function next(err, data) {
    var result = gen.next(data);
    if (result.done) return;
    result.value(next);
  }

  next();
}

function* g() {
  // ...
}

run(g);

fs.readFile(fileName, (err,data) => {});

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

(err, data) 形式并不是 fs.readFile 专属,这是一种 thunks (functions) 的 callback 传参, co 库也仅支持这一类(特指普通函数,co 当然也支持 yield promise 之类的)。

当然,理论上来说,yield 操作的适用对象是有限定的,基本也逃脱不了 co 支持的类型:

  • promises
  • thunks (functions)
  • array (parallel execution)
  • objects (parallel execution)
  • generators (delegation)
  • generator functions (delegation)

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...