Node异步执行&回调函数
说到Node.js , 我们就不得不提它的异步处理机制。
何为异步处理机制呢,举个不严谨但大家都感兴趣的例子。
比如maoguy想在一年内谈12个女朋友,如果maoguy是个一心一意的人,那么它会在一月初和女友1啪啪啪,一月末和女友1分手,然后在二月初再跟女友2交往...以此类推。这就是同步处理机制,在事件1处理结束之前,不能进行事件2。
那么聪明的朋友在这个时候就要举手发言啦!!!那我们maoguy老师能否和十二个女朋友同时交往,换着口味啪个一年十二个月呢???答案当然是肯定的,这就是我们厉害的异步处理机制,是不是想想就有点小兴奋?嘻嘻,兴奋那就继续往下看。
我们从上文提到的例子入手。
1 //async0.js 2 //举个谈女朋友的例子 3 4 var num = 0 ; //num为谈的女朋友的数量 5 6 function printNum() 7 { 8 console.log ("maoguy paped "+num+" girl(s)") ; 9 } 10 11 function pap () //papapa 12 { 13 num += 1 ; 14 } 15 16 for (var i = 0 ; i < 12 ; i ++) 17 { 18 pap (); 19 printNum(); 20 }
当我们给pap()函数加入延时后会有什么变化呢?
1 //async1.js 2 //尝试在函数pap()中加入setTimeout()延时函数 3 4 var num = 0 ; //num为谈的女朋友的数量 5 6 function printNum() 7 { 8 console.log ("maoguy paped "+num+" girl(s)") ; 9 } 10 11 function pap () //papapa 12 { 13 setTimeout (function () 14 { 15 num += 1 ; 16 } 17 , 18 1000 19 ) 20 } 21 22 for (var i = 0 ; i < 12 ; i ++) 23 { 24 pap () ; 25 printNum() ; 26 }
对比上面两个.js代码,我们可以发现,JavaScript的运行并不会拘泥于一个任务接着另外一个任务,而是采取一种异步执行的方式。这就是所谓的异步执行。
存在即合理,既然异步执行存在,甚至还比同步执行要高出一档,那么它又有什么优点让广大群众对其趋之若鹜呢。其实在以上的例子就很好地体现,所谓同时把12个妹子于无形,悄无声息,闷声发大财。理论上来讲异步执行可以更好地分配时间,就像“蒸一个包子三分钟,蒸三个包子要多久?”(请热心群众在评论区积极发言哈)。
相信看完上面几集,广大妇女群众对狡猾无比的小毛是咬牙切齿,恨不得用各种姿势把它活活榨干了。
交了12个女朋友居然让人无法发现?这肯定是有犯法的!
所谓天网恢恢,疏而不漏,本博主写此随笔正是为了给广大走在争取应有权益革命道路上的女士们介绍一款新型武器,包你满足!!!
好啦,废话讲太多了,这个武器就叫做回调函数。下面用一个简单示例展示一个简单的回调。
1 //callback.js 2 //一个简单的callback function 例子 3 4 function noCallback ( callback ) 5 { 6 callback () ; 7 8 console.log ("hello , i am not callback ! SB !") ; 9 10 callback () ; 11 } 12 13 function isCallback () 14 { 15 console.log ("hey , i am callback !") ; 16 } 17 18 noCallback (isCallback) ;
好,我们来抓奸在床,狠狠地教训一下自作聪明一脚踏12床的小毛!尝试着在小毛啪啪啪的时候偷偷加入一个回调,代码如下:
1 //async2.js 2 //使用回调函数callback 3 4 var num = 0 ; //num为谈的女朋友的数量 5 6 function printNum() 7 { 8 console.log ("maoguy paped "+num+" girl(s)") ; 9 } 10 11 function pap (callback) //papapa 12 { 13 setTimeout (function () 14 { 15 num += 1 ; 16 callback () ; 17 } 18 , 19 1000 20 ) 21 22 } 23 24 for (var i = 0 ; i < 12 ; i ++) 25 { 26 pap ( printNum ) ; //把printNum()作为pap()的参数形成回调函数 27 }
成功抓到偷情的小毛!!!而且一次不漏!!!简直大快人心普天同庆!!!
以上剧情纯属虚构,如有雷同,不甚荣幸。
今天学习了一点回调和异步的皮毛,故作玄虚,望各位观众多多包涵,再次感谢。
其实不想走,其实我想留...刚刚提到了蒸包子的问题,相信大家早已心明如镜,那么在最后小毛还想请教各位美女一个问题。如果给小毛香吻一个需要5分钟,那么献吻12个需要多长时间呢?