js異步調用實現

jopen 10年前發布 | 22K 次閱讀 JavaScript開發 JS

使用場景:

由于網頁中有大量的As與JS交互。As加載與初始化過程比較長。當As未初始化完成,JS開始調用會導致JS報錯,影響后續JS的運行。

異步代碼:

function Async(){
    // 是否開始標記
    this.isRead = false,
    this.fs = new Array(), // this對象
    // 準備好了
    this.read = function() {
        this.isRead = true;
        for(var i = 0; i<this.fs.length; i++) {
            this.execute(this.fs[i].o,this.fs[i].f,this.fs[i].p,this.fs[i].r)
        }
        this.reInit();
    },
    // 對象初始化
    this.reInit = function() {
        this.fs = new Array(); // this對象
    },
    // 代理調用函數
    this.proxy = function(obj,fc,params,reFc){
        if(this.isRead) {
            this.execute(obj,fc,params,reFc);
            return;
        }
        // 將函數與對應參與放到對象內
        this.fs[this.fs.length] = {
            "o":obj,
            "f":fc,
            "p":params,
            "r":reFc
        }
    },
    // 執行
    this.execute = function(obj,fc,params,reFc) {
        var result = fc.apply(obj, params);
        if(reFc) {
            reFc.apply(this, [result]);
        }
    }
}

使用示例:


// 測試代碼

//測試對象
var t = {
    g1:function(v){
        console.log("g1:目標方法,傳遞參數:%O",v);
        return v;
    },
    g2:function(v) {
        console.log("g2:回調方法,返回:" + v);
    }
};
// 使用對象
var a = new Async();
a.proxy(t,t.g1,["這是測試"],t.g2);
a.read();



 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!