国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

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

2024-05-06 16:04:47
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了一個簡單的Node.js異步操作管理器分享,需要的朋友可以參考下

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

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

復制代碼 代碼如下:


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


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

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

復制代碼 代碼如下:


/*
 *  異步管理器
 *  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() //執行
 *     .on('success', function(){
 *          allThings_is_down();
 *     });
 *
 *     push方法接受數組
 */

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' ){
            arg.forEach( function(v,i){
               This.execArrys.push( v );
            });
        } else {
               This.execArrys.push( arg );
        }

        return this; //鏈一個
};

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

        if( this.succCount == this.execArrys.length ) {
            //所有函數成功執行后觸發事件
            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 );
}

 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 方山县| 泰宁县| 洪洞县| 开远市| 湟中县| 富阳市| 西乡县| 揭阳市| 沁源县| 施秉县| 蓬溪县| 西乌珠穆沁旗| 萨迦县| 青岛市| 阳泉市| 德钦县| 新丰县| 玉林市| 惠东县| 临清市| 舒城县| 永昌县| 陆川县| 武功县| 读书| 溆浦县| 亳州市| 临海市| 甘泉县| 建水县| 宝兴县| 稻城县| 钟山县| 连州市| 安图县| 沁源县| 遂昌县| 固始县| 安国市| 土默特右旗| 灌阳县|