您当前的位置: 首页 > 

qianbo_insist

暂无认证

  • 0浏览

    0关注

    399博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

nodejs 嵌套消除和高并发

qianbo_insist 发布时间:2019-08-28 23:01:57 ,浏览量:0

安装eventproxy
npm install eventproxy
EventProxy.js仅仅是一个很轻量的工具,能带来一种事件式编程的思维变化。有几个特点:
1 利用事件机制解耦复杂业务逻辑
2 移除被广为诟病的深度callback嵌套问题
3 将串行等待变成并行等待,提升多异步场景下的执行效率
4 无平台依赖,适合前后端,能用于浏览器和Node.js
nodejs重复请求
在一条sql执行的时间内,如果来了1000条访问请求,那么一次查询结果将返回给1000条请求。
var EventProxy = require('eventproxy');
var proxy = new EventProxy();
var status = "ready";
var select = function(callback){
  proxy.once("selected",callback);
  if(status == "ready"){
  	status = "pending";
  	db.select("SQL", function(results){
  		proxy.emit("selected",results);
  		status = "ready";
  	});
  }
}
无深度嵌套的,并行的代码
var proxy = new EventProxy();
var render = function (template, data, l10n){
    _.template(template, data);
};
proxy.assign("template", "data", "l10n", render);
$.get("template", function (template) {
    // something
    proxy.trigger("template", template);
});
$.get("data", function (data) {
    // something
    proxy.trigger("data", data);
});
$.get("l10n", function (l10n) {
    // something
    proxy.trigger("l10n", l10n);
});
after
const ep = new EventProxy();
ep.all(['tpl', 'data'], (tpl, data) => { 
  // 在所有指定的事件触发后,将会被调用执行 参数对应各自的事件名 
  // 后面的 tpl 和 data 的顺序和前面监听的时间顺序是一样的
});
fs.readFile('template.tpl', 'utf-8', function (err, content) {
  ep.emit('tpl', content);
});
db.get('some sql', function (err, result) {
  ep.emit('data', result);
});
list 参数是所有的异步结束之后触发事件传递的参数的数组
const ep = new EventProxy();
ep.after('got_file', files.length, (list) => {
  // 在所有文件的异步执行结束后将被执行
  // 所有文件的内容都存在list数组中
});
for (var i = 0; i  {
    // 触发结果事件
    ep.emit('got_file', content);
  });
}
持续型异步协作
此处以股票为例,数据和模版都是异步获取,但是数据会持续刷新,视图会需要重新刷新。
var ep = new EventProxy();
ep.tail('tpl', 'data', function(tpl, data){
    //待所有指定的时间都触发后,将第一次回调
    //以后再出发其中之一的时间,都会回调
});
fs.readFile('template.tpl', 'utf-8', function(err, content){
    ep.emit('tpl', content);
});
setInterval(function(){
    db.get('sql', function(err, result){
        ep.emit('data', result);
    });
}, 2000);
关注
打赏
1663161521
查看更多评论
立即登录/注册

微信扫码登录

0.0402s