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