Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 排队/限制jQuery ajax请求_Javascript_Jquery_Ajax_Jquery Deferred - Fatal编程技术网

Javascript 排队/限制jQuery ajax请求

Javascript 排队/限制jQuery ajax请求,javascript,jquery,ajax,jquery-deferred,Javascript,Jquery,Ajax,Jquery Deferred,我需要在服务器上发出大量ajax请求,然后在完成后运行回调。通常,使用jQuery的deferred.done()可以很容易地做到这一点。然而,为了避免服务器被淹没,我将请求排队,并每X毫秒触发一个请求 e、 g 问题是,promisesList数组最初是空的,因此done()回调会立即触发,然后,setTimeout()会开始发送ajax请求。有没有一种简单的方法来创建ajax请求,先“暂停”它们,然后使用setTimeout()激发它们 我发现各种节流/队列实现都可以按顺序触发ajax请求,

我需要在服务器上发出大量ajax请求,然后在完成后运行回调。通常,使用jQuery的
deferred.done()
可以很容易地做到这一点。然而,为了避免服务器被淹没,我将请求排队,并每X毫秒触发一个请求

e、 g

问题是,
promisesList
数组最初是空的,因此
done()
回调会立即触发,然后,
setTimeout()
会开始发送ajax请求。有没有一种简单的方法来创建ajax请求,先“暂停”它们,然后使用
setTimeout()
激发它们


我发现各种节流/队列实现都可以按顺序触发ajax请求,但我很高兴它们可以并行触发,只是延迟一点。

首先遇到的问题是
when()
不能以这种方式处理数组。它接受一个任意的承诺列表,因此您可以通过使用以下命令应用数组来绕过它:

$.when.apply(null, promiseList).done(function(){
    // Do something
    // use the `arguments` magic property to get an ordered list of results
});
第二,节流方法可以使用{delay:timeinsectonds}的$.ajax param完成,但我提出了一个解决方案,该解决方案设置了一个新的延迟,该延迟立即返回(以保持顺序),但在超时后解决


请参阅一个交互式示例

设置超时
具有任意延迟不可选?我使用的是
setTimout()
,问题是如何处理
延迟的
对象。我猜您需要处理$。当每个请求一部分时。。。或者你等到所有的东西都被发送后再做…(a)我确信
$。when()
就是这样工作的!选中,您是正确的,它不接受数组。奇怪的是,这似乎是显而易见的。(b) 我在jQ文档中没有看到ajax请求的
delay
param?(c) 你的小提琴太完美了,我没有想到过像那样手动创建
$.Deferreds()
。非常感谢!
$.when.apply(null, promiseList).done(function(){
    // Do something
    // use the `arguments` magic property to get an ordered list of results
});