异步化编程,仿NodeJs的小样

自从NodeJs出来以后,异步编程便更加系统化和框架话。

var Asy=function(){}
Asy.EmptyFun=function(){}
Asy.Start = function (action, success, failure) {
     var asy = new Asy();
     asy._addAction(action, success, failure);  
     return asy;
}
Asy.prototype._addAction=function(action,success,failure){
	var _me=this;
	_me._actions=_me._actions||[];
	_me._actions.push({
		action:action||Asy.EmptyFun,
		success:success||Asy.EmptyFun,
		failure:failure||Asy.EmptyFun
	});
}
Asy.prototype.Then=function(action,success,failure){
	var _me=this;
	_me._addAction(action,success,failure);
	return _me;
}
Asy.prototype.Execute=function(){
	var _me=this;
	var length=_me._actions.length;
	var resultFun=function(){
		var args = Array.prototype.slice.call(arguments).concat([_me._actions[length - 1].success, _me._actions[length - 1].failure]);
		_me._actions[length - 1].action.apply(null, args);
	}
	for (var i = _me._actions.length - 2; i >= 0 ; i--) {
         (function (action) {
             var oldResultFun = resultFun; 
             resultFun = function () {
                 var newSuccess = function () {
                     var args = Array.prototype.slice.call(arguments);
                     action.success.apply(null, args);
                     oldResultFun.apply(null, args);
                 }; 
                 var args = Array.prototype.slice.call(arguments).concat([newSuccess, action.failure]); 
                 action.action.apply(null, args);
             };
         })(_me._actions[i]);
     }; 
     var args = Array.prototype.slice.call(arguments);
     resultFun.apply(null, args);
}

测试:

var testAsyFun = function (i, success, failure) {
		console.log("test "+i);
       i = i + 1; 
       success(i);		
}
Asy.Start(testAsyFun, function (i) {
        console.log("A:" + i);
    }).Then(testAsyFun, function (i) {
        console.log("B:" + i)
    }).Then(testAsyFun, function (i) {
        console.log("C:" + i)
    }).Execute(1);

结果:

总结:这样玩有点意思,待续中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值