您的位置:首页 > Web前端 > Node.js

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

2015-04-24 11:35 302 查看
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,...,){})将在参数代表的所有事件触发之后调用最后一个参数表示的回调函数。回调函数内的参数与各个事件触发时所返回的结果一一对应。感觉不错吧,赶紧试试。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  EventProxy