首頁  >  文章  >  web前端  >  一個簡單的Node.js非同步操作管理器分享_javascript技巧

一個簡單的Node.js非同步操作管理器分享_javascript技巧

WBOY
WBOY原創
2016-05-16 16:50:471154瀏覽

最近寫nodejs比較多,剛開始的時候碰到的異步的操作比較少,因為想做的東西比較簡單,一查api有同步的,為了省事就直接用同步的搞了,慢慢發現這不是個事呀,好好的非同步特性不用,非得用同步的,真囧,並且很多東西木有同步的api的。

好!寫異步的,慢慢的出現了這種程式碼。 。 。

複製程式碼 程式碼如下:

mysql.query('xxxx').on('xxxx').on('xxxx').on('xxxx').on('xxxx').on('xxxx').on('xxxx').on('xxxx')。 success', function(){
   mysql.query('xxxx').on('success', function(){
        mysql.query('xxxx').on('uncsution). {
            mysql.query('xxxx').on('success', function(){
       🎜>                    mysql. query('xxxx').on('success', function(){
                          });
                });
          ); 🎜>    });
});

恩,你也看到了,這樣下去代碼多醜,會像老太太的裹腳布一樣了,於是就產生下面的非同步操作管理器,小巧精緻,嘿嘿,絕對夠用,代碼的事,用代碼說話吧,直接亮代碼,如碼:

TODO:不夠全面,例如說錯的就沒有處理


複製程式碼

程式碼如下:

/*
 *  非同步管理器
 *  author : jser.me
 *
 *  使用方法:
  ;
 *     asyncMg
 *     .push(function( next ){
 *           ....
 *           並為);
 *         })
 *     })
 *     .push(function( next ){
   *            ....
 *            next( );
 *         })
 *     })
 *      ', function() {
 *          allThings_is_down();
 *     }); *​​
 *
function typeOf( obj ){
    return Object.prototype.toString.call( obj ).match(/[object ([^]]*)]/)[1];
}

function AsyncManager( arg ){
    this.execArrys = [];    this.push( arg );

}
}
}

//使用系統帶的繼承方法
require('util').inherits( AsyncManager, require('events').EventEmitter );

//標記成功運行的函數數目

AsyncManager.prototype.succCount = 0;


//加入

AsyncManager.prototype.push = function( arg ) {

        var This = this;

        if( typeOf(arg) == 'Array' ){            });
        } else {

          }


        return this; //連結一個
};

//執行
AsyncManager.prototype.run = function(){
        var self = this;

        if( this.succCount == this.execArrys.length ) {

           ;
        } else {

this.execArrys[ this.succCount ]( self.run.bind( self ) );

        }

        this.succCount ;

        return this; //連結一個

};

exports = module.exports = function( arg ){
    return new AsyncManager( arg );
}


 

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn