小编典典
可以按照您的要求进行操作。但是,您将请求发送到的服务器可能有一个原因限制了它们。作为从事Web开发工作并亲眼目睹DDOS,抓取以及其他滥用API的人,我建议遵循其限制。
话虽如此,这是您可以做到的。
$ .ajax实际上返回一个延迟的对象,因此您可以利用该对象。$ .when还可以接受任意数量的延迟对象。结合这两个事实可以解决您的问题。
var deferreds = [];
$.each(groupedStats, function(index, stat){
deferreds.push(
// No success handler - don't want to trigger the deferred object
$.ajax({
url: '/some/url',
data: {stat: stat},
type: 'POST'
})
);
});
// Can't pass a literal array, so use apply.
$.when.apply($, deferreds).then(function(){
// Do your success stuff
}).fail(function(){
// Probably want to catch failure
}).always(function(){
// Or use always if you want to do the same thing
// whether the call succeeds or fails
});
请注意,这不是竞争条件。尽管$ .ajax是异步的,但$ .each不是异步的,因此您的递延列表将是到达$ .when之前的总列表,并且$ .then /
$。fail / $。always仅在它们全部完成后才被触发。
编辑:我忘了添加5s拆分,但这说明了总体思路。您可能可以从这里弄清楚如何将其应用于您的问题。顺便说一句,您可以只使用array.splice(0,5)从数组中获取下5个结果。.splice是可以安全使用的;如果元素总数少于5,则仅获取所有剩余元素。
2020-07-26