美文网首页让前端飞
eventProxy 解决回调坑 (Node.js)

eventProxy 解决回调坑 (Node.js)

作者: _Wake | 来源:发表于2016-12-03 11:56 被阅读231次

EventProxy 仅仅是一个很轻量的工具,但是能够带来一种事件式编程的思维变化。有几个特点:
• 利用事件机制解耦复杂业务逻辑
• 移除被广为诟病的深度callback嵌套问题
• 将串行等待变成并行等待,提升多异步协作场景下的执行效率
• 友好的Error handling
• 无平台依赖,适合前后端,能用于浏览器和Node.js
• 兼容CMD,AMD以及CommonJS模块环境

安装:
npm install eventproxy
示例代码:

var fs = require('fs');
var EventProxy = require('eventProxy';)

var ep = new EventProxy();

// 一般回调方法,读取3个文本文档的内容
fs.readFile('./fileOne.txt', 'utf8', function(err, content1) {
    fs.readFile('./fileTwo.txt', 'utf8', function(err, content2) {
        fs.readFile('./fileThree.txt', 'utf8', function(err, content3) {
            console.log(content1 + content2 + content3);
        });  
    });  
});

一、解决回调 - all 方法监听:

ep.all(['read_file1', 'read_file2', 'read_file3'], function(content1, content2, content3){
    console.log(content1 + content2 + content3);
});

// emit方法:抛出事件
fs.readFile('./file1.txt', 'utf8', function(err, content1){
    ep.emit('read_file1', content1);    // 事件名称 + 参数
});
fs.readFile('./file1.txt', 'utf8', function(err, content2){
    ep.emit('read_file2', content2);
});
fs.readFile('./file1.txt', 'utf8', function(err, content3){
    ep.emit('read_file3', content3);
});

二、解决回调 - after 方法监听:

/**
* 监听一定次数后,执行匿名函数
* @param string 监听的事件名称
* @param int 监听事件的次数
*/
ep.after('red_file', 3, function(contents) {   
    console.log(contents.join());    
})

// emit方法:抛出事件
fs.readFile('./file1.txt', 'utf8', function(err, content1){
    ep.emit('read_file', content1);    // 此次抛出的事件名称相同
});
fs.readFile('./file1.txt', 'utf8', function(err, content2){
    ep.emit('read_file', content2);
});
fs.readFile('./file1.txt', 'utf8', function(err, content3){
    ep.emit('read_file', content3);
});

三、优化代码 - fail 监听错误

ep.fail(function(err){
    console.log(err);
});
fs.readFile('./file4.txt', 'utf8', function(err, content){
    if (err) {
        ep.emit('error', err);
    }
})

四、优化代码 - throw 抛出错误

fs.readFile('./file4.txt', 'utf8', function(err, content){
    if (err) {
        ep.throw(err);  //会直接 log出错误,效果等同与 fail监听,并省略之 
    }
})

五、优化代码 - done 再次简化

ep.after('read_file', 1, function(contents){
    console.log(contents.join());
});
fs.readFile('./file1.txt', 'utf8', ep.done('read_file'))     //省略匿名函数,直接抛出事件名与参数
ep.after('read_file', 1, function(contents){
    console.log(contents.join());
});
fs.readFile('./file1.txt', 'utf8', ep.done('read_file', function(content) {
    return content + 'abc';           // done方法也可以将参数进行处理后再抛出
})) 

相关文章

  • eventProxy 解决回调坑 (Node.js)

    EventProxy 仅仅是一个很轻量的工具,但是能够带来一种事件式编程的思维变化。有几个特点:• 利用事件机制解...

  • eventProxy的使用

    异步回调地狱的避免方式除了用async模块之外,还可以使用eventProxy,代码如下:

  • js中的异步操作

    Node.js 中读取文件 回调函数嵌套造成回调地狱 Promise Promise 是异步编程的一种解决方案,比...

  • 【Node.js】基于EventProxy模块的顺序异步调用

    【Node.js】基于EventProxy模块的顺序异步调用 [TOC] Tag:Node.js、WebStorm...

  • 异步

    JavaScript异步编程解决方案笔记 JavaScript Promise迷你书 Node.js回调黑洞全...

  • node.js(六)

    Node.js 回调函数Node.js 异步编程的直接体现就是回调。异步编程依托于回调来实现,但不能说使用了回调后...

  • 2020-02-23

    Node.js回调函数 Node.js异步编程的直接体现就是回调 异步编程依托于回调来实现,但不能说使用了回调后程...

  • Node学习(3)--异步编程

    Node.js 回调函数 Node.js 异步编程的直接体现就是回调。 异步编程依托于回调来实现,但不能说使用了回...

  • 01node.js

    01、模块 02、关注学习 03、Node.js 回调函数Node.js 异步编程的直接体现就是回调。异步编程依托...

  • 07_Node.js Event

    一、回调函数 callback 1、回调函数 Node.js 异步编程的直接体现就是回调,异步编程依托于回调来实现...

网友评论

    本文标题:eventProxy 解决回调坑 (Node.js)

    本文链接:https://www.haomeiwen.com/subject/soqcmttx.html