一些nodejs实现同步操作想法实现

【菜科解读】
众所周知,异步是nodejs中得天独厚的特点和优势,但同时在程序中同步的需求(比如控制程序的执行顺序为:func1 -> func2 ->func3 )也是很常见的。
本文就是对这个问题记录自己的一些想法。
需要执行的函数:
var func1 = function(req,res,callback){ setTimeout(function(){ console.log('in func1'); callback(req,res,1); },13000);var func2 = function(req,res,callback){ setTimeout(function(){ console.log('in func2'); callback(req,res,2); },5000);var func3 = function(req,res,callback){ setTimeout(function(){ console.log('in func3'); callback(req,res,3); },1000);}
可以看出在func1,func2和func3中都是用了setTimeout函数,执行的时间分别为13秒,5秒和1秒。
由于nodejs异步的特性,如果使用普通的函数调用方法:
var req = null;var res = null;var callback = function(){};func1(req,res,callback);func2(req,res,callback);func3(req,res,callback);
输出内容:
in func3in func2in func1
原因是因为nodejs是异步的,func2不会等func1执行完毕后再执行,而是立即执行(func3也是如此)。
由于func3的运行时间最短而率先结束,func2次之,func1最后。
但这明显不是我们想要的结果。
怎么办?
解决办法一:callback
//深层嵌套var req = null;var res = null;func1(req,res,function(){ func2(req,res,function(){ func3(req,res,function(){ process.exit(0); }); });
这种方法虽然能快速的解决,但暴露的问题也很明显,一是代码维护不方面,二是代码的深层嵌套看起来很不舒服。
这种方法并不可取。
解决方法二:递归调用
function executeFunc(funcs,count,sum,req,res){ if(count == sum){ return ; else{ funcs[count](req,req,function(){ count++; executeFunc(funcs,count,sum,req,res);//同步调用var req = null;var res = null;var funcs = [func1,func2,func3];var len = funcs.length;executeFunc(funcs,0,len,req,res);
先将多个函数组成一个数组。
再可以利用递归函数的特性,使程序按照一定的顺序执行。
解决方法三:调用类库
随着nodejs的发展,响应的类库也越来越多。
Step和async就是其中不错的。
1. Step的调用相对比较清爽:
Step( function thefunc1(){ func1(this); function thefunc2(finishFlag){ console.log(finishFlag); func2(this); function thefunc3(finishFlag){ console.log(finishFlag););
2.async 的series方法,就本例而言,它的调用方法:
var req = null;var res = null;var callback = function(){};async.series( function(callback){ func1(req,res,callback); function(callback){ func2(req,res,callback); function(callback){ func3(req,res,callback); );
一些,nodejs,实现,同步,操作,想法,众所周知,世界上一些神奇奇妙的现象 存在自然现象
在地球上面经常性的就会发现一些令人十分震惊的事情,有一些事情发生过之后,是令考古学家或者是科学家都是难以去解释。
正是因为这些东西十分的罕见,特别的奥秘,如是能够看到的情况之下,肯定是十分幸运。
但有很多的奇特现象都能够造成较大的破坏。
奇怪的地裂现象在地球上面关于地雷的现象曾经出现过非常的多,其中最著名的一个是来自于非洲大陆的中亚大裂谷,也是较为著名的地质区域之一,直接有着3000多公里的距离全部都裂开,标志着非洲大陆正在慢慢的分裂,为索马里和努比亚板块在科学家的预期之中。
在1万年之内两个板块将彻底的分离会形成,一个新的海洋盆地,,虽然过程极其的缓慢,但是裂痕在每隔一段时间会出现,也展现出来了地球的力量。
圆形的冰块大自然是非常神奇的,有时候总是制造出一些令人无法得知原因的事情,例如在南极洲和北极的区域之中,经常性的能够看到一些冰块长相特别的奇特是圆形的,像一大块披萨或者是煎饼一般呈现出圆形的状态,中间比较薄、四周比较厚、会向上翘起漂浮在海面之上。
这些原型物体都是结冰的泡沫,或者是水泥互相之间碰撞才形成了圆形,和白天温度上升,夜晚温度较冷有一定的关系。
在空中的群鸟曾在美国奥斯汀的一条高速公路上,忽然之间出现了一大群的黑鸟,在天空之中盘旋,令人觉得十分的震惊,当时导致高速公路无法行驶,当地还专门关闭了一条车道,能够看出这些鸟最开始是在栏杆上栖息。
但有车辆经过的时候会全部飞起来,衬托的天空都是黑压压的一片,画面十分壮观。
世界上这一些没有办法揭开的未解之谜
比如在哈萨克斯坦的一个角落中,人们就发现一个非常巨大的五角星,而它周围也有着许多的物质,可是奇怪的是,周围根本就没有人类曾经生活过的痕迹,这个非常奇怪的,五角星直径达到365米,就好像是古老的象征一般。
有人猜测,这或许只不过是一个建筑装饰的符号,但是也有人猜测,这可能是外星人和大家在打招呼,总之到目前为止都是一个未解之谜。
也有一位UFO专家,在经过多年的调查之后,终于发现在月球上也有一个金字塔,但是这完全是一个不规则的金字塔,有着不一样的线条和角度,甚至很多人都觉得这估计不可能是大自然所造成的,可是到底是怎么而产生的呢?这就是未解之谜。
有人认为这张照片根本就不是真实的,完全是人类所伪造,也如有人说这只不过是从山峰滚下来的一块大石头,但是不管是什么样的原因,都只是在大家的猜测中,人们根本就不知道在这背后是因为什么原因所造成的。
事实上这一些金字塔的建造本身就匪夷所思,在那一个年代技术根本就没有如此的高超,为什么会有着如此精湛的建筑技术呢?声明:本文内容仅代表作者个人观点,与本站立场无关。