我想使用ajax构建一个伪队列 然后我想一次发出五个电话。
伪代码看起来像:
For each item in list as ajaxN{
FuncToRun.push(ajaxN);
If(count(FuncToRun)==5){
.when (FuncToRun).onefinishes{
FuncToRun.pop(success Func)
}
}
}
这可能吗?
答案 0 :(得分:0)
这听起来像你想要jQuery.Callbacks。
但是,Callbacks对象不提供length
属性,因此您需要设计一些机制来监视队列中的函数数量,并在达到阈值(5)时触发它。
例如,您可以使用少量自定义方法和属性将Callbacks对象包装在一个小命名空间中。
var FunctionList = (function() {
var list = $.Callbacks(),
length = 0,
threshold = 5;
function add(fn) {
if(fn && $.isFunction(fn)) {
list.add(fn);
if(++length >= threshold) {
list.fire().empty();
length = 0;
}
}
else {
throw new TypeError("FunctionList.add() must be passed a function");
}
}
function getLength(x) { return length; }
function setThreshold(x) { threshold = x; }
function getThreshold() { return threshold; }
return {
add: add,
getLength: getLength,
setThreshold: setThreshold,
getThreshold: getThreshold
};
})();
正如所写,FunctionList
非常基本,符合问题的最低要求。可以进一步公开更多的Callbacks API(例如,标志,.disable()
,.fireWith()
,.has()
,.lock()
,.remove()
)。您还可以将命名空间重构为构造函数,允许同时使用多个FunctionList
。
如何填充FunctionList
取决于您。可以肯定地调用FunctionList.add(...)
来响应AJAX的成功,这就是你想要的。