[EventProxy(一)]NodeJs之使用EventProxy解决多层异步调用的嵌套

NodeJs的异步调用机制虽然神奇并好用,但也并非不会引起任何副作用。传统的异步调用方式看起来像是下面这样:

asynFunA(function(errA,resA){
    if(!errA)
    {
        asynFunB(function(errB,resB){
            if(!errB)
            {
                asynFunC(function(errC,resC){
                    if(!errC)
                    {
                        asynFunD(function(errD,resD){
                            ......
                        });
                    }
                });
            }
        });
    }
});

假设实际代码中同时调用多达十几个甚至更多的异步函数,你会发现一层又一层叠加的代码被顶到了屏幕之外。这还没有加入异常处理的代码呢。否则实际的代码将会变得零散而臃肿。
	为了避免陷入上述异步调用的深度嵌套所带来的诸多不便,一种行之有效的解决办法是使用EventProxy:
$ npm install -g EventProxy
有了EventProxy,于是上述代码变成:
var EventProxy=require("eventproxy");
var ep = new EventProxy();

ep.all('eventA','eventB','eventC','eventD',...,function(resA,resB,resC,resD,...){
    //do something with resA,resB,resC,resD,...
});
asynFunA(function(errA,resA){
    if(!errA)
    {
        ep.emit('eventA',resA);
    }
});
asynFunB(function(errB,resB){
    if(!errB)
    {
        ep.emit('eventB',resB);
    }
});
asynFunC(function(errC,resC){
    if(!errC)
    {
        ep.emit('eventC',resC);
    }
});
asynFunD(function(errD,resD){
    if(!errD)
    {
        ep.emit('eventD',resD);
    }
});
......

ep.all('eventA','eventB','eventC','eventD',...,function(resA,resB,resC,resD,...,){})将在参数代表的所有事件触发之后调用最后一个参数表示的回调函数。回调函数内的参数与各个事件触发时所返回的结果一一对应。感觉不错吧,赶紧试试。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值