NodeJS怎么实现同步

  介绍

这篇文章主要介绍了NodeJS怎么实现同步,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获、下面让小编带着大家一起了解一下。

<强>前言

众所周知,异步是得天独厚的特点和优势,但同时在程序中同步的需求(比如控制程序的执行顺序为:func1→func2→func3)也是很常见的。

下面这篇文章主要介绍了关于NodeJS实现同步的相关内容,NodeJS被打上了单线程,非阻塞,事件驱动……等标签。在单线程的情况下,是无法开启子线程的。经过了很久的研究,发现并没有线程函数! ! !但是有时候,我们确实需要“多线”程处理事务.nodeJS有两个很基础的api: setTimeout和setInterval。这两个函数都能实现“异”步。nodeJS的异步实现:nodeJS有一个任务队列,在使用setInterval函数的时候,会每隔特定的时间向该任务队列增加任务,从而实现“多任务”处理。但是,”特定的时间“不代表是具体的时间,也有可能是会大于我们设定的时间,也有可能小于。

<强>我们跑跑下面代码块

setInterval(函数(),{   .getTime, console.log (new 日期()());   },,1000);

输出的结果如下:

1490531390640
1490531390640
1490531392660
1490531392660
1490531394670
1490531394670
1490531396672
1490531396672
,

我们可以看的到,所有的时间间隔都是不一样的。时间的偏移不仅包含了间隔的1 s,还包含了<代码> console.log() 的耗时,以及新的日期()的耗时。在大量的数据统计下,时间间隔近似于1 s。

<强>问题来了,setInterval是能实现多任务的效果,但是怎样才能实现任务之间的同步操作呢?

这里实现的方法是通过回调函数实现的。

function 一个(回调),{   ,//模拟任务一个耗时   ,setTimeout (function (), {   console.log才能(“task  a 结束!“);//,才能回调任务b   ,,回调();   ,},3000);   };      function  b (), {   ,setTimeout (function (), {   console.log才能(“task  b 结束!“);   ,},5000);   }   (b),

这里举了一个很简单的例子,就是将b方法的实现赋值给一个方法的回调函数从而实现函数回调,但是会有个问题。假设一方法依赖于b方法,b方法依赖于c方法,丙方法依赖于d方法……也就意味着每个方法的实现都需要持有上一个方法的实例,从而实现回调。

function 一个(b, c, d), {   ,console.log (“hello  a");   ,b (c, d);   };      function  b (c, d), {   ,console.log (“hello  b");   ,c (d);   };      function  c (d), {   ,console.log (“hello  c");   ,d ()   };      function  d (), {   ,console.log (“hello  d");   };      (b, c, d);

输出结果

你好
你好b
你好c
你好d

如果回调函数写的多了,会造成代码特别特别恶心。

如果有类似于同步的函数能让任务顺序执行就更好了。终于找到了异步这个库<代码>美元npm instanll异步代码

async =,要求(“async");   时间=a  function (回调),{   ,//延迟5 s模拟耗时操作   ,setTimeout (function  (), {   console.log才能(“hello  world  a");//,才能回调给下一个函数   回调才能(null,,“function  a");   ,},5000);   };      时间=b  function (回调),{   ,//延迟1 s模拟耗时操作   ,setTimeout (function  (), {   console.log才能(“hello  world  b");//,才能回调给下一个函数   回调才能(null,,“function  b");   ,},1000);   };      时间=c  function (回调),{   ,console.log (“hello  world  c");   ,//回调给下一个函数   ,回调(null,,“function  c");   };//,根据b, a, c,这样的顺序执行   async.series ([b, a, c),, function (错误,,结果),{   ,console.log(结果);   });

注释基本能够很好的理解了,我们看看输出

hello world b
hello world
hello world c
[& # 39;函数b # 39; & # 39;函数一个# 39;,& # 39;函数c # 39;]

上面的基本异步模块的实现的如果了解更多关于异步模块的使用,可以点击:查看详情

其实nodeJS基本api也提供了异步实现同步的方式。基于承诺+然后的实现

NodeJS怎么实现同步