1

Wikipedia 建议可以使用生成器来实现协程。这是否意味着可以使用ES6 生成器来实现节点光纤

4

3 回答 3

3

你在寻找类似https://github.com/visionmedia/co的东西吗?

从自述文件:

var co = require('co');

co(function *(){
  var a = yield get('http://google.com');
  var b = yield get('http://yahoo.com');
  var c = yield get('http://cloudup.com');
  console.log(a.status);
  console.log(b.status);
  console.log(c.status);
})()

co(function *(){
  var a = get('http://google.com');
  var b = get('http://yahoo.com');
  var c = get('http://cloudup.com');
  var res = yield [a, b, c];
  console.log(res);
})()

有一个基于此的名为 koa ( http://koajs.com ) 的新 Web 框架。

于 2014-01-03T00:12:41.250 回答
1

我编写了一个名为 wait.for 的 Fibers 包装器:https ://github.com/luciotato/waitfor

然后我用生成器编写了相同的功能: https ://github.com/luciotato/waitfor-ES6

您可以比较两者以了解生成器如何替换节点光纤,但语法不同。

一个重要的区别使得不可能拥有相同的 API,是 ES6 的生成器主体是用一种特殊的语法实现的:function* 而 node-fibers 允许您使用任何 js 函数。

于 2014-05-01T04:42:35.640 回答
0

试图移植一个非常小的子集但失败了。关键是 node-fibers 会Fiber.yield()一直停止执行 Fiber 的调用堆栈,而生成器yield只会停止立即函数。虽然您可能能够实现一个行为相似的系统(如Task.js),但似乎 API 兼容的实现是不可能的。

于 2013-08-17T21:41:10.017 回答