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 相关文章推荐
js获取html页面节点方法(递归方式)
Dec 13 Javascript
用jquery模仿的a的title属性的例子
Oct 22 Javascript
jQuery实现锚点scoll效果实例分析
Mar 10 Javascript
jquery特效 点击展示与隐藏全文
Dec 09 Javascript
JavaScript获取图片像素颜色并转换为box-shadow显示
Mar 11 Javascript
jQuery中的一些常见方法小结(推荐)
Jun 13 Javascript
JavaScript作用域示例详解
Jul 07 Javascript
在knockoutjs 上自己实现的flux(实例讲解)
Dec 18 Javascript
JS调用安卓手机摄像头扫描二维码
Oct 16 Javascript
javascript网页随机点名实现过程解析
Oct 15 Javascript
vue中改变滚动条样式的方法
Mar 03 Javascript
typescript编写微信小程序创建项目的方法
Jan 29 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
如何隐藏你的.php文件
2007/01/04 PHP
百度实时推送api接口应用示例
2014/10/21 PHP
js bind 函数 使用闭包保存执行上下文
2011/12/26 Javascript
node.js入门教程
2014/06/01 Javascript
javascript获取元素离文档各边距离的方法
2015/02/13 Javascript
继续学习javascript闭包
2015/12/03 Javascript
用JS实现轮播图效果(二)
2016/06/26 Javascript
jquery 动态增加,减少input表单的简单方法(必看)
2016/10/12 Javascript
微信小程序  wx.request合法域名配置详解
2016/11/23 Javascript
js倒计时显示实例
2016/12/11 Javascript
微信小程序 解析网页内容详解及实例
2017/02/22 Javascript
angular.js指令中的controller、compile与link函数的不同之处
2017/05/10 Javascript
微信小程序的生命周期的详解
2017/10/19 Javascript
vue中导出Excel表格的实现代码
2018/10/18 Javascript
js实现json数组分组合并操作示例
2019/02/12 Javascript
详解基于iview-ui的导航栏路径(面包屑)配置
2019/02/22 Javascript
JS学习笔记之原型链和利用原型实现继承详解
2019/05/29 Javascript
js设置鼠标悬停改变背景色实现详解
2019/06/26 Javascript
详解微信小程序图片地扯转base64解决方案
2019/08/18 Javascript
vue.js+ElementUI实现进度条提示密码强度效果
2020/01/18 Javascript
基于JQuery实现页面定时弹出广告
2020/05/08 jQuery
[01:00:35]2018DOTA2亚洲邀请赛3月30日B组 EffcetVSMineski
2018/03/31 DOTA
python with statement 进行文件操作指南
2014/08/22 Python
Python中装饰器学习总结
2018/02/10 Python
python覆盖写入,追加写入的实例
2019/06/26 Python
Python列表元素常见操作简单示例
2019/10/25 Python
python3 自动打印出最新版本执行的mysql2redis实例
2020/04/09 Python
新秀丽拉杆箱美国官方网站:Samsonite美国
2016/07/25 全球购物
英国灯具和灯泡网上商店:Lights.co.uk
2018/02/02 全球购物
Optimalprint加拿大:在线打印服务
2020/04/03 全球购物
《青海高原一株柳》教学反思
2014/04/25 职场文书
2014年社区国庆节活动方案
2014/09/16 职场文书
狮子林导游词
2015/02/03 职场文书
高考学习决心书
2015/02/04 职场文书
学生党支部工作总结2015
2015/05/26 职场文书
2019入党申请书范文3篇
2019/08/21 职场文书