[EventProxy(一)]NodeJs之使用EventProxy解决多层异步调用的嵌套
2015-04-24 11:35
302 查看
NodeJs的异步调用机制虽然神奇并好用,但也并非不会引起任何副作用。传统的异步调用方式看起来像是下面这样:
假设实际代码中同时调用多达十几个甚至更多的异步函数,你会发现一层又一层叠加的代码被顶到了屏幕之外。这还没有加入异常处理的代码呢。否则实际的代码将会变得零散而臃肿。
ep.all('eventA','eventB','eventC','eventD',...,function(resA,resB,resC,resD,...,){})将在参数代表的所有事件触发之后调用最后一个参数表示的回调函数。回调函数内的参数与各个事件触发时所返回的结果一一对应。感觉不错吧,赶紧试试。
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,...,){})将在参数代表的所有事件触发之后调用最后一个参数表示的回调函数。回调函数内的参数与各个事件触发时所返回的结果一一对应。感觉不错吧,赶紧试试。
相关文章推荐
- 使用Promise解决多层异步调用的简单学习
- 使用Promise解决多层异步调用的简单学习心得
- NodeJS: 使用 (Generator) 生成器解决 JavaScript 回调嵌套问题
- 使用async解决nodejs异步问题
- 使用Promise链式调用解决多个异步回调的问题
- nodejs中解决异步嵌套循环,循环嵌套异步
- PHP多层嵌套时调用路径混乱的解决办法
- Android多层嵌套Fragment中调用系统相机拍照以及裁剪的相关问题解决
- nodejs Async 使用方法(解决多层回调嵌套)
- WinForm查询大数据界面假死,使用异步调用解决
- 原生js异步查询(ajax)多层嵌套解决
- Vue项目使用swiper做轮播图时,异步调用数据时导致图片不能滑动的解决方法
- nodejs -- for循环里面套异步解决 -- 类似并发
- QSlider 拖动滑动条使用valueChanged(int value)信号重复调用槽函数问题解决
- ReactNative踩坑日志——使用async/await语法解决网络请求的异步导致的指令执行顺序错乱问题
- dubbo 使用学习八(异步调用
- AIDL的简单使用,涵盖5.0之后系统及魅族手机调用问题的解决
- 解决nodejs异步数据延迟 解决方案
- thinkphp调用二级栏目,volist多层嵌套
- spring boot 使用注解@async实现异步调用