亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

node.js中實現(xiàn)同步操作的3種實現(xiàn)方法

 更新時間:2014年12月05日 13:12:14   投稿:junjie  
這篇文章主要介紹了node.js中實現(xiàn)同步操作的3種實現(xiàn)方法,本文用實例講解一些需要同步操作的情況下,如何編程實現(xiàn),需要的朋友可以參考下

眾所周知,異步是得天獨厚的特點和優(yōu)勢,但同時在程序中同步的需求(比如控制程序的執(zhí)行順序為:func1 -> func2 ->func3 )也是很常見的。本文就是對這個問題記錄自己的一些想法。

需要執(zhí)行的函數(shù):

復(fù)制代碼 代碼如下:

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函數(shù),執(zhí)行的時間分別為13秒,5秒和1秒。由于nodejs異步的特性,如果使用普通的函數(shù)調(diào)用方法:

復(fù)制代碼 代碼如下:

var req = null;
var res = null;
var callback = function(){};
func1(req,res,callback);
func2(req,res,callback);
func3(req,res,callback);

輸出內(nèi)容:

復(fù)制代碼 代碼如下:

in func3
in func2
in func1

原因是因為nodejs是異步的,func2不會等func1執(zhí)行完畢后再執(zhí)行,而是立即執(zhí)行(func3也是如此)。由于func3的運行時間最短而率先結(jié)束,func2次之,func1最后。但這明顯不是我們想要的結(jié)果。怎么辦?

解決辦法一:callback

復(fù)制代碼 代碼如下:

//深層嵌套
var req = null;
var res = null;

func1(req,res,function(){
  func2(req,res,function(){
    func3(req,res,function(){
      process.exit(0);  
    }) 
  }); 
});

這種方法雖然能快速的解決,但暴露的問題也很明顯,一是代碼維護(hù)不方面,二是代碼的深層嵌套看起來很不舒服。這種方法并不可取。

解決方法二:遞歸調(diào)用

復(fù)制代碼 代碼如下:

function executeFunc(funcs,count,sum,req,res){
  if(count == sum){
     return ;
   }
   else{
    funcs[count](req,req,function(){
       count++;
       executeFunc(funcs,count,sum,req,res);
    });
   } 
}

//同步調(diào)用
var req = null;
var res = null;
var funcs = [func1,func2,func3];
var len = funcs.length;
executeFunc(funcs,0,len,req,res);

先將多個函數(shù)組成一個數(shù)組。再可以利用遞歸函數(shù)的特性,使程序按照一定的順序執(zhí)行。

解決方法三:調(diào)用類庫

隨著nodejs的發(fā)展,響應(yīng)的類庫也越來越多。Step和async 就是其中不錯的。

1.Step的調(diào)用相對比較清爽:

復(fù)制代碼 代碼如下:

Step(
  function thefunc1(){
    func1(this);
  },
  function thefunc2(finishFlag){
    console.log(finishFlag);
    func2(this);
  },
  function thefunc3(finishFlag){
    console.log(finishFlag);
  }
);

2.async 的 series方法,就本例而言,它的調(diào)用方法:
復(fù)制代碼 代碼如下:

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); 
    }
  ]
);

相關(guān)文章

  • nodejs個人博客開發(fā)第一步 準(zhǔn)備工作

    nodejs個人博客開發(fā)第一步 準(zhǔn)備工作

    這篇文章主要為大家詳細(xì)介紹了nodejs個人博客開發(fā)的準(zhǔn)備工作,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • node.js使用express框架進(jìn)行文件上傳詳解

    node.js使用express框架進(jìn)行文件上傳詳解

    在本篇內(nèi)容里小編給大家整理了關(guān)于node.js使用express框架進(jìn)行文件上傳的相關(guān)知識點內(nèi)容,有需要的朋友們跟著學(xué)習(xí)下。
    2019-03-03
  • Node.js npm命令運行node.js腳本的方法

    Node.js npm命令運行node.js腳本的方法

    今天小編就為大家分享一篇Node.js npm命令運行node.js腳本的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • node.js文件上傳重命名以及移動位置的示例代碼

    node.js文件上傳重命名以及移動位置的示例代碼

    本篇文章主要介紹了node.js文件上傳重命名以及移動位置的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • windows下更新npm和node的方法

    windows下更新npm和node的方法

    本篇文章主要介紹了windows下更新npm和node的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • Node.js API詳解之 module模塊用法實例分析

    Node.js API詳解之 module模塊用法實例分析

    這篇文章主要介紹了Node.js API詳解之 module模塊用法,結(jié)合實例形式分析了Node.js API中module模塊基本功能、原理、用法及操作注意事項,需要的朋友可以參考下
    2020-05-05
  • Node.js實現(xiàn)鏈?zhǔn)交卣{(diào)

    Node.js實現(xiàn)鏈?zhǔn)交卣{(diào)

    這篇文章介紹了Node.js實現(xiàn)鏈?zhǔn)交卣{(diào)的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • nodejs實現(xiàn)發(fā)出蜂鳴聲音(系統(tǒng)報警聲)的方法

    nodejs實現(xiàn)發(fā)出蜂鳴聲音(系統(tǒng)報警聲)的方法

    這篇文章主要介紹了nodejs實現(xiàn)發(fā)出蜂鳴聲音(系統(tǒng)報警聲)的方法,結(jié)合實例形式分析了nodejs發(fā)出蜂鳴聲的原理及具體應(yīng)用方法,需要的朋友可以參考下
    2017-01-01
  • node.js中的path.delimiter方法使用說明

    node.js中的path.delimiter方法使用說明

    這篇文章主要介紹了node.js中的path.delimiter方法使用說明,本文介紹了path.delimiter的方法說明、語法、使用實例和實現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • node.js做一個簡單的爬蟲案例教程

    node.js做一個簡單的爬蟲案例教程

    這篇文章主要介紹了node.js做一個簡單的爬蟲案例教程,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07

最新評論