javascript 支持链式调用的异步调用框架Async.Operation


Posted in Javascript onAugust 04, 2009
Async = {}; 
Async.Operation = function(options) { 
options = options || {}; 
var callbackQueue = []; 
var chain = (options.chain && options.chain === true) ? true : false; 
var started = false; 
var innerChain = null; 
this.result = undefined; 
this.state = "running"; 
this.completed = false; 
this.yield = function(result) { 
var self = this; 
if (!chain) { 
self.result = result; 
self.state = "completed"; 
self.completed = true; 
} else { 
started = true; 
self.result = result; 
self.state = "chain running"; 
self.completed = false; 
} 
setTimeout(function() { 
if (!innerChain) { 
while (callbackQueue.length > 0) { 
var callback = callbackQueue.shift(); 
if (chain) { 
callbackResult = callback(self.result); 
self.result = callbackResult; 
if (callbackResult && callbackResult instanceof Async.Operation) { 
innerChain = Async.chain(); 
while (callbackQueue.length > 0) { 
innerChain.next(callbackQueue.shift()); 
} 
innerChain.next(function(result) { 
self.result = result; 
self.state = "completed"; 
self.completed = true; 
return result; 
}); 
callbackResult.addCallback(function(result) { 
self.result = result; 
innerChain.go(result); 
}); 
} 
} else { 
callback(self.result); 
} 
} 
if (!innerChain) { 
self.state = "completed"; 
self.completed = true; 
} 
} else { 
while (callbackQueue.length > 0) { 
innerChain.next(callbackQueue.shift()); 
} 
innerChain.next(function(result) { 
self.result = result; 
self.state = "completed"; 
self.completed = true; 
return result; 
}); 
} 
}, 1); 
return this; 
}; 
this.go = function(initialArgument) { 
return this.yield(initialArgument); 
} 
this.addCallback = function(callback) { 
callbackQueue.push(callback); 
if (this.completed || (chain && started)) { 
this.yield(this.result); 
} 
return this; 
}; 
this.next = function(nextFunction) { 
return this.addCallback(nextFunction); 
}; 
}; 
Async.chain = function(firstFunction) { 
var chain = new Async.Operation({ chain: true }); 
if (firstFunction) { 
chain.next(firstFunction); 
} 
return chain; 
}; 
Async.go = function(initialArgument) { 
return Async.chain().go(initialArgument); 
}
Javascript 相关文章推荐
鼠标图片振动代码
Jul 06 Javascript
自动更新作用
Oct 08 Javascript
不要在cookie中使用特殊字符的原因分析
Jul 13 Javascript
JS不间断向上滚动效果代码
Dec 25 Javascript
javascript中setTimeout和setInterval的unref()和ref()用法示例
Nov 26 Javascript
如何利用JS通过身份证号获取当事人的生日、年龄、性别
Jan 22 Javascript
关于session和cookie的简单理解
Jun 08 Javascript
PHP+jquery+ajax实现分页
Dec 09 Javascript
jQuery实现radio第一次点击选中第二次点击取消功能
May 15 jQuery
elementUI Vue 单个按钮显示和隐藏的变换功能(两种方法)
Sep 04 Javascript
js实现简单贪吃蛇游戏
May 15 Javascript
JavaScript实现复选框全选和取消全选
Nov 20 Javascript
JavaScript 异步调用框架 (Part 5 - 链式实现)
Aug 04 #Javascript
JavaScript 异步调用框架 (Part 4 - 链式调用)
Aug 04 #Javascript
JavaScript 异步调用框架 (Part 3 - 代码实现)
Aug 04 #Javascript
JavaScript 异步调用框架 (Part 2 - 用例设计)
Aug 03 #Javascript
JavaScript 异步调用框架 (Part 1 - 问题 & 场景)
Aug 03 #Javascript
jQuery 相关控件的事件操作分解
Aug 03 #Javascript
利用javascript实现一些常用软件的下载导航
Aug 03 #Javascript
You might like
WindowsXP中快速配置Apache+PHP5+Mysql
2008/06/05 PHP
ThinkPHP采用原生query实现关联查询left join实例
2014/12/02 PHP
magento后台无法登录解决办法的两种方法
2016/12/09 PHP
一些常用的JS功能函数(2009-06-04更新)
2009/06/04 Javascript
jQuery学习笔记(4)--Jquery中获取table中某列值的具体思路
2013/04/10 Javascript
js判断60秒以及倒计时示例代码
2014/01/24 Javascript
jQuery实现根据类型自动显示和隐藏表单
2015/03/18 Javascript
JavaScript实现Iterator模式实例分析
2015/06/09 Javascript
jquery带翻页动画的电子杂志代码分享
2015/08/21 Javascript
JavaScript对象学习小结
2015/09/02 Javascript
CSS3 3D 技术手把手教你玩转
2016/09/02 Javascript
js中scrollTop()方法和scroll()方法用法示例
2016/10/03 Javascript
解决ztree搜索中多级菜单展示不全问题
2017/07/05 Javascript
使用jQuery实现两个div中按钮互换位置的实例代码
2017/09/21 jQuery
Javascript Promise用法详解
2018/05/10 Javascript
jQuery实现验证用户登录
2019/12/10 jQuery
[47:04]EG vs RNG 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
Python中asyncore的用法实例
2014/09/29 Python
归纳整理Python中的控制流语句的知识点
2015/04/14 Python
简单了解python反射机制的一些知识
2019/07/13 Python
使用WingPro 7 设置Python路径的方法
2019/07/24 Python
Python Numpy,mask图像的生成详解
2020/02/19 Python
pyecharts调整图例与各板块的位置间距实例
2020/05/16 Python
全网最细 Python 格式化输出用法讲解(推荐)
2021/01/18 Python
Moda Operandi官网:美国奢侈品电商,海淘秀场T台同款
2020/05/26 全球购物
项目专员岗位职责
2013/12/04 职场文书
迟到检讨书800字
2014/01/13 职场文书
年终晚会主持词
2014/03/25 职场文书
车辆转让协议书
2014/04/15 职场文书
社区学习雷锋活动总结
2014/04/25 职场文书
博士生导师推荐信
2014/07/08 职场文书
党员教师个人对照检查材料范文
2014/09/25 职场文书
客房服务员岗位职责
2015/02/09 职场文书
技术员个人工作总结
2015/03/03 职场文书
学法用法心得体会(2016推荐篇)
2016/01/21 职场文书
Golang 结构体数据集合
2022/04/22 Golang