EventProxy流程控制

EventProxy是一个通过控制事件触发顺序来控制业务流程的工具。

1. 利用事件机制解耦复杂业务逻辑
2. 移除被广为诟病的深度callback嵌套问题
3. 将串行等待变成并行等待,提升多异步协作场景下的执行效率
4. 友好的Error handling

node.js的亮点是回调函数,node.js流程控制、传参都是通过回调函数来实现的。开发中经常会遇到回调嵌套的场景,尤其是在业务复杂的场景下,会嵌套n层回调函数,这样做的原因是为了控制代码执行的流程。

下面是一个需要同步读取文件的例子

var str = '';
fs.readFile('file1.txt', function(err, data1) {
    str += data1;
    fs.readFile('file2.txt', function(err, data2) {
        str += data2;
        fs.readFile('file3.txt', function(err, data3) {
            str += data3;
        });
    });
});

上面代码有3层回调嵌套,用嵌套来保障文件的顺序读取。这样代码可读性就比较差了,而开发中用到的嵌套往往有很多层,代码很难读。

我们用EventProxy来解耦

安装:npm install eventproxy

引包:var EventProxy = require('eventproxy');
            var ep = new EventProxy();

1、异步协作 all

多个操作并行执行,每个操作完成后触发一个自定义事件.ep.all监听所有操作触发的事件,然后在回调函数里面提供各事件提供的结果

ep.all('read1', 'read2', 'read3', function(data1, data2, data3) {
    //监听事件,所有事件都触发完成后,在这里汇总结果
    console.info(data1 + '~' + data2 + '~' + data3);
});
fs.readFile('file1.txt', function(err, data1) {
    ep.emit('read1', data1);//触发事件
});
fs.readFile('file2.txt', function(err, data2) {
    ep.emit('read2', data2);//触发事件
});
fs.readFile('file3.txt', function(err, data3) {
    ep.emit('read3', data3);//触发事件
});

2、重复异步协作 after

`after`方法适合重复的操作,比如读取10个文件,调用5次数据库等。将handler注册到N次相同事件的触发上。达到指定的触发数,handler将会被调用执行,每次触发的数据,将会按触发顺序,存为数组作为参数传入。

var files = ['file1.txt', 'file2.txt', 'file3.txt'];
ep.after('readfile', files.length, function(list) {
    // 在所有文件的异步执行结束后将被执行
    // 所有文件的内容都存在list数组中

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值