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




转载于:https://my.oschina.net/cimu/blog/192089

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值