龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > Javascript编程 >

Node.js中使用计时器定时执行函数详解_node.js(4)

时间:2014-08-19 12:39来源:网络整理 作者:网络 点击:
分享到:
fs.unlink("/path/to/file"); }); }); 使用setTimeout替代setInterval来确保函数执行的串行性 假设,你打算设计一个叫my_async_function的函数,它可以做某些I/O操作(比如解

                                     fs.unlink("/path/to/file");

                            });

                   });

使用setTimeout替代setInterval来确保函数执行的串行性

假设,你打算设计一个叫my_async_function的函数,它可以做某些I/O操作(比如解析日志文件)的函数,并打算让它周期性执行,你可以用setInterval这样实现它:

复制代码 代码如下:

                   var interval = 1000;

                   setInterval(function() {

                            my_async_function(function() {

                                     console.log('my_async_function finished!');

                            });

                   },interval);//译者注:前面“,interval”是我添加的,作者应该是笔误遗漏了

你必须能确保这些函数不会被同时执行,但是如果使用setinterval你无法保证这一点,假如my_async_function函数运行的时间比interval变量多了一毫秒,它们就会被同时执行,而不是按次序串行执行。

译者注:(下面粗体部分为译者添加,非原书内容)

为了方便理解这部分内容,可以修改下作者的代码,让它可以实际运行:

复制代码 代码如下:

                   var interval = 1000;

                   setInterval(function(){

                            (function my_async_function(){

                                      setTimeout(function(){

                                              console.log("1");

                                      },5000);

                           })();

                   },interval);

 运行下这段代码看看,你会发现,等待5秒钟后,“hello ”被每隔1秒输出一次。而我们期望是,当前my_async_function执行完毕(耗费5秒)后,等待1秒再执行下一个my_async_function,每次输出之间应该间隔6秒才对。造成这种结果,是因为my_async_function不是串行执行的,而是多个在同时运行。

 因此,你需要一种办法来强制使一个my_async_function执行结束到下个my_async_function开始执行之间的间隔时间正好是interval变量指定的时间。你可以这样做:
 

复制代码 代码如下:

                    var interval = 1000; // 1 秒

                   (function schedule() {      //第3行

                            setTimeout(function do_it() {

精彩图集

赞助商链接