最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一個簡單的Node.js異步操作管理器分享

 更新時間:2014年04月29日 10:37:38   作者:  
這篇文章主要介紹了一個簡單的Node.js異步操作管理器分享,需要的朋友可以參考下

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

好!寫異步的,慢慢的出現(xiàn)了這種代碼。。。

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

mysql.query('xxxx').on('success', function(){
   mysql.query('xxxx').on('success', function(){
        mysql.query('xxxx').on('success', function(){
            mysql.query('xxxx').on('success', function(){
                mysql.query('xxxx').on('success', function(){
                    mysql.query('xxxx').on('success', function(){
                        //let's say fuck
                    });
                });
            });
        });
    });
});

恩,你也看到了,這樣下去代碼多丑,會像老太太的裹腳布一樣了,于是就產(chǎn)生下面的異步操作管理器,小巧精致,嘿嘿,絕對夠用,代碼的事,用代碼說話吧,直接亮代碼,如碼:

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

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

/*
 *  異步管理器
 *  author : jser.me
 *
 *  使用方法:
 *     var asyncMg = require('./AsyncManager');
 *     asyncMg
 *     .push(function( next ){
 *         some_aysnc_method().on('success'{
 *            ....
 *            next();
 *         })
 *     })
 *     .push(function( next ){
 *         other_aysnc_method().on('success'{
 *            ....
 *            next();
 *         })
 *     })
 *     .push( ... )
 *     .run() //執(zhí)行
 *     .on('success', function(){
 *          allThings_is_down();
 *     });
 *
 *     push方法接受數(shù)組
 */

function typeOf( obj ){
    return Object.prototype.toString.call( obj ).match(/\[object ([^\]]*)\]/)[1];
}

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

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

//標(biāo)記成功運行的函數(shù)數(shù)目
AsyncManager.prototype.succCount = 0;


//加入
AsyncManager.prototype.push = function( arg ) {

        var This = this;
        if( typeOf(arg) == 'Array' ){
            arg.forEach( function(v,i){
               This.execArrys.push( v );
            });
        } else {
               This.execArrys.push( arg );
        }

        return this; //鏈一個
};

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

        if( this.succCount == this.execArrys.length ) {
            //所有函數(shù)成功執(zhí)行后觸發(fā)事件
            this.emit( 'success' );
        } else {
            this.execArrys[ this.succCount ]( self.run.bind( self ) );
        }

        this.succCount++;
        return this; //鏈一個
};

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

 

相關(guān)文章

最新評論

和政县| 通化县| 商城县| 荥经县| 宝兴县| 张家港市| 桐乡市| 海晏县| 溧水县| 自治县| 长沙市| 乌兰浩特市| 建阳市| 会理县| 克什克腾旗| 南澳县| 都匀市| 固原市| 康平县| 蓝山县| 新津县| 曲阳县| 靖宇县| 苏尼特右旗| 溆浦县| 泰和县| 潜江市| 珠海市| 淮滨县| 新密市| 新安县| 栾川县| 肇州县| 黄骅市| 通道| 江源县| 泊头市| 灵寿县| 贡嘎县| 定安县| 通海县|