Wikipedia 建议可以使用生成器来实现协程。这是否意味着可以使用ES6 生成器来实现节点光纤?
问问题
1144 次
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 回答