EventProxy流程控制

简介: EventProxy流程控制EventProxy是一个通过控制事件触发顺序来控制业务流程的工具。1. 利用事件机制解耦复杂业务逻辑2. 移除被广为诟病的深度callback嵌套问题3. 将串行等待变成并行等待,提升多异步协作场景下的执行效率4. 友好的Error handlingnode.js的亮点是回调函数,node.js流程控制、传参都是通过回调函数来实现的。

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数组中

   //list中值是无序的,因为for循环中ep.emit触发顺序是无序的(node异步特点),排列顺序取决于node事件触发的顺序。可以通过group来控制对应关系,后续讲。

});

for (var i = 0; i < files.length; i++) {
    fs.readFile(files[i], function(err, data) {
        // 触发结果事件
        ep.emit('readfile', data);
    });
}

  

注意:如果ep.emit('你的事件名称') 的次数没有达到after中次数(第二个参数),是无法触发after的回调函数的,这里一定要注意!

 

参考:https://blog.csdn.net/shmnh/article/details/43866677

目录
相关文章
|
7月前
|
C++
C++ 条件与 If 语句:掌握逻辑判断与流程控制精髓
C++ 中的条件语句用于根据布尔表达式的真假执行不同代码。`if` 用于当条件为真时执行一段代码,`else` 配合 `if` 在条件不成立时执行另一段代码。`else if` 允许测试额外的条件。`switch` 语句提供多分支选择。还有三元运算符 `(condition) ? expressionTrue : expressionFalse`,它是一种简写的 if...else 形式,常用于一行内作出决定。
99 0
|
7月前
|
C++
C++语言中流程控制
C++语言中流程控制
51 0
|
7月前
|
Shell Windows Perl
Shell编程中的条件判断与流程控制
Shell编程中的条件判断与流程控制
93 0
|
Java
1.5 流程控制语句
1.5 流程控制语句
57 0
|
2月前
|
算法 程序员
流程控制语句
流程控制语句
46 4
|
C语言 开发者
7.流程控制
7.流程控制
112 0
|
PHP 开发者
流程控制|学习笔记
快速学习流程控制
流程控制|学习笔记
|
Go 开发者
流程控制介绍 | 学习笔记
简介:快速学习流程控制介绍
流程控制介绍 | 学习笔记
|
JavaScript 前端开发
JavaScript的流程控制之for循环语句和while循环语句(二)
JavaScript的流程控制(二) 上一篇博客说到了JavaScript流程控制的if条件语句和switch选择语句,现在我们来说一下JavaScript流程控制中的循环语句。JavaScript中循环语句主要包含for循环和while循环两类。 for循环 for循环又分为for循环,for…in循环,for…of循环,其中for…of循环是es6中新增的,咱们后面讲es6时再讲,这次主要讲for循环和for…in循环。 1.for循环 循环可以将代码块执行指定的次数。 // 语法: // for(语句1;语句2;语句3){ // 语句4; /
|
Python
Python语法之流程控制
首先我们一起来了解一下牛郎织女的故事:传说古代天帝的孙女织女擅长织布,每天给天空织彩霞。她讨厌这枯燥的生活,就偷偷下到凡间,私自嫁给河西的牛郎,过上男耕女织的生活。此事惹怒了天帝,把织女捉回天宫,责令他们分离,只允许他们每年的农历七月七日在鹊桥上相会一次。织女因为厌烦了每天织布的枯燥生活,选择下到凡间。在我们的生活中,也经常要做大大小小的各种决策。影响我们做出决策的因素有很多,一般是当某些条件满足时,我们会做出决策 A;条件不满足时,做出决策 B。
189 0