最近写了个 node 的异步流程控制库,名字叫 eventr。
github 的地址在:https://github.com/alsotang/eventr
这个库利用事件的思维来解决 callback hell 的问题,使用的方式跟 eventproxy 很像。只不过在实际的工作中,我遇到了 eventproxy 在对付不定参数的事件组时的不足,所以主要的 on
接口采用了接受事件数组的方式,并且回调函数返回一个以各事件为 property 的hash。
另外,这个库的实现非常简单,由于在后端,我们很少使用 once
,也很少对事件进行解绑。所以这些我都倾向于不去实现,而是交给垃圾回收。
这样一来 eventr 的代码可以说非常适合新手进行入门学习。
以下是一段示例代码:用 fetchurl 函数去抓取 google 和 yahoo 的页面,并分别抛出事件,然后在 on 事件中对他们的结果进行处理。接口还是比较简单的。
it('should work with event array', function (done) {
var et = new Eventr();
fetchurl('google', function (err, content) {
et.emit('page1', content);
});
fetchurl('yahoo', function (err, content) {
et.emit('page2', content);
});
// edata is a hash
et.on(['page1', 'page2'], function (edata) {
edata.page1.should.equal('pagecontentgoogle');
edata.page2.should.equal('pagecontentyahoo');
done();
});
});
更多的示例可以到 https://github.com/alsotang/eventr 来查看,文档也是比较清晰的。:)