手机
当前位置:查字典教程网 >编程开发 >Javascript教程 >javascript 支持链式调用的异步调用框架Async.Operation
javascript 支持链式调用的异步调用框架Async.Operation
摘要:复制代码代码如下:Async={};Async.Operation=function(options){options=options||{...

复制代码 代码如下:

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 支持链式调用的异步调用框架Async.Operation】相关文章:

javascript原型模式用法实例详解

Node.js中JavaScript操作MySQL的常用方法整理

javascript插件开发的一些感想和心得

javascript改变和控制显示的图片大小

javascript先序遍历DOM树的方法

深入理解JavaScript的React框架的原理

javascript带回调函数的异步脚本载入方法实例分析

JavaScript中的异常处理方法介绍

简述JavaScript中正则表达式的使用方法

Javascript技术栈中的四种依赖注入小结

精品推荐
分类导航