我的脚本对我的服务器进行了大约15次ajax调用。我希望它们并行执行。我正在尝试使用when
并行执行一堆ajax请求,但出于某种原因,它仍在逐个执行。
我的代码如下:
var requests = $.map(results, function(result, i) {
var suggestionContainer = $('<div class="suggestion-' + i + '">' + result + '</div>');
resultsContainer.append(suggestionContainer);
return $.get('check.php', { keyword: result }).done(function(res) {
res = JSON.parse(res);
suggestionContainer.append(generateSocialMediaList(res.social_media))
.append(generateDomainList(res.domains));
}).fail(function() {
suggestionContainer.remove();
});
});
$.when(requests).done(function() {
console.log('Complete')
}, function() {
alert('Something Failed');
});
我有什么不对的吗?
我发出15个请求的原因是因为check.php
调用了第三方API。 API很慢,遗憾的是没有其他选择。发出15个并行请求将比1个请求快得多,并等待check.php
完成。
代码的工作原理如下:
suggestions.php
发出请求(未包含该请求,因为它不是解决问题所必需的)。结果存储在数组results
。map
进行迭代。requests
数组现在包含10-15个承诺。when
并行执行请求(这至少是我尝试做的事情。)check.php
的结果会被插入到DOM中。答案 0 :(得分:2)
您的代码将使用浏览器允许的尽可能多的并行性来执行请求。
浏览器用于将对单个域的并发请求限制为6.这可能已更改。
这些请求的 响应 将逐个提供服务,因为JavaScript是单线程的,这就是您所观察到的。
另外:仔细检查你的AJAX通话是否失败。只要任何承诺被拒绝,when
就会拒绝。