日本好好热aⅴ|国产99视频精品免费观看|日本成人aV在线|久热香蕉国产在线

  • <cite id="ikgdy"><table id="ikgdy"></table></cite>
    1. 西西軟件園多重安全檢測(cè)下載網(wǎng)站、值得信賴的軟件下載站!
      軟件
      軟件
      文章
      搜索

      首頁(yè)編程開(kāi)發(fā)javascript|JQuery → 一些nodejs實(shí)現(xiàn)同步操作想法實(shí)現(xiàn)

      一些nodejs實(shí)現(xiàn)同步操作想法實(shí)現(xiàn)

      相關(guān)軟件相關(guān)文章發(fā)表評(píng)論 來(lái)源:西西整理時(shí)間:2011/12/23 1:22:26字體大。A-A+

      作者:西西點(diǎn)擊:732次評(píng)論:2次標(biāo)簽: 同步

      115同步盤v1.0.9.3 正式版
      • 類型:下載工具大小:1.6M語(yǔ)言:中文 評(píng)分:1.8
      • 標(biāo)簽:
      立即下載

           眾所周知,異步是nodejs中得天獨(dú)厚的特點(diǎn)和優(yōu)勢(shì),但同時(shí)在程序中同步的需求(比如控制程序的執(zhí)行順序?yàn)椋篺unc1 -> func2 ->func3 )也是很常見(jiàn)的。本文就是對(duì)這個(gè)問(wèn)題記錄自己的一些想法。

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

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

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

           輸出內(nèi)容:

      in func3
      in func2
      in func1

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

           解決辦法一:callback

      //深層嵌套
      var req = null;
      var res = null;
      
      func1(req,res,function(){
        func2(req,res,function(){
          func3(req,res,function(){
            process.exit(0);   
          })  
        });  
      });

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

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

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

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

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

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

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

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

             2.async 的 series方法,就本例而言,它的調(diào)用方法:

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

        網(wǎng)盤
        (268)網(wǎng)盤
        網(wǎng)盤是什么網(wǎng)盤是一個(gè)云存儲(chǔ)工具,通俗的來(lái)說(shuō)就是你把文件通過(guò)網(wǎng)盤儲(chǔ)存在網(wǎng)絡(luò)上。只要你登上網(wǎng),不論在什么地方都能使用。相當(dāng)于網(wǎng)絡(luò)移動(dòng)盤。用起來(lái)挺方便。網(wǎng)盤哪個(gè)好其實(shí)這個(gè)毋庸置疑的百度云網(wǎng)盤是最好的,目前網(wǎng)盤也就那么幾家,對(duì)用戶來(lái)說(shuō)只要免費(fèi)就行了,其他的對(duì)我們的普通用戶來(lái)說(shuō)并不是特別重要。網(wǎng)盤下載客戶端大全說(shuō)明西西軟件園提供市面上主流網(wǎng)盤的客戶端下載,除了網(wǎng)盤客戶端的各種版本之外,西西還會(huì)提供一些網(wǎng)盤相...更多>>

        相關(guān)評(píng)論

        閱讀本文后您有什么感想? 已有人給出評(píng)價(jià)!

        • 8 喜歡喜歡
        • 3 頂
        • 1 難過(guò)難過(guò)
        • 5 囧
        • 3 圍觀圍觀
        • 2 無(wú)聊無(wú)聊

        熱門評(píng)論

        最新評(píng)論

        發(fā)表評(píng)論 查看所有評(píng)論(2)

        昵稱:
        表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
        字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過(guò)審核才能顯示)