维基百科建议coroutines can be implemented with generators。这是否意味着可以使用node-fibers实现ES6 generators?
答案 0 :(得分: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)的新网络框架就是基于此。
答案 1 :(得分:1)
我编写了一个名为wait.for的光纤包装器:https://github.com/luciotato/waitfor
然后我使用生成器编码了相同的功能:https://github.com/luciotato/waitfor-ES6
您可以比较两者以了解Generators如何替换node-Fibers,但语法不同。
一个重要的区别,使得无法拥有相同的API,
ES6的生成器体是用特殊语法实现的:function*
而node-fibers允许你使用任何js函数。
答案 2 :(得分:0)
我tried to port a very small subset但失败了。关键是节点光纤的Fiber.yield()
在光纤的调用堆栈中一直停止执行,而生成器的yield
仅停止立即函数。虽然您可能能够实现类似行为的系统(如Task.js),但似乎无法实现与API兼容的实现。