在javascript中链接多个异步方法
Chaining multiple asynchronous methods in javascript
我正在编写一个javascript库,以将ajax请求抽象到我的HTTP API。我的每个javascript函数都是jquery的ajax调用的包装器,该调用在完成时对用户进行回调。
例如。
mylib.doThing( "foo", { success:function(){alert("done");});
在我想连续执行mylib.doFoo两次的情况下,我有这样的东西:
mylib.doThing( "foo", { success:function(){ mylib.doThing( "bar", { success:function(){alert("done");}); });
对于超过两步的任何事情,这都会很快变得一团糟。
有没有可能提供一个更干净的语法,也许更像下面的语法?我需要如何实现mylib.doThing()
?
mylib.doThing("foo").mylib.doThing("bar").alert("done");
function doThingFluent(a, b) {
return {
_name : a,
_chainedCall : b,
doMoreThingFluent : function(a1) {
return doThing(a1, this);
},
done : function(callback) {
var chained = this._chainedCall;
var name = this._name;
while (chained) {
callback = function(n, c) {
return function() {
mylib.doThing(n, { success : c });
};
} (name, callback);
name = chained._name;
chained = chained._chainedCall;
}
mylib.doThing(name, {success: callback});
}
};
doThingFluent("foo").doMoreThingFluent("bar").done(function(){alert("done");})
如果你只想把未指定数量的成功请求与最终做的事情联系起来,那么把所有要做的事情列为一个自然列表而不是方法链会更干净:
mylib.doThing("foo", "bar", /* all done callback -> */ function() { alert("done") })
doThing
将在一个工厂内创建嵌套回调,或者更好的是,创建迭代管理器,按顺序运行所有请求,然后调用最终回调。
相关文章:
- 简单的JavaScript方法链接
- D3使用方法链接时的不同行为
- Javascript方法链接定义
- 使用javascript的方法链接不起作用
- 如何在JS中完成方法链接
- 缺点和替代方案 - JS方法链接
- jQuery/JS方法链接
- 是否可以在JavaScript中的变量名后面的新行上开始方法链接
- Javascript异步调用链接
- CoffeeScript调用返回对象的方法(链接)
- 方法链接返回未定义
- 如何在维护命名空间的同时创建类似jQuery的方法链接
- jQuery如何进行方法链接
- 如何有效地调试方法链接函数参数
- JavaScript 方法链接和 this 对象
- NODEJS中的Javascript方法链接
- 带有子方法的方法链接
- 在方法链接中使用函数调用者名称
- 在CouchDB中使用Map-Reduce方法链接文档
- 对象或方法链接如何在jQuery中工作