【发布时间】:2015-11-18 04:08:13
【问题描述】:
我是 jquery 和 ajax 的新手,我正在尝试使用延迟和承诺的概念来解决我遇到的这个问题。 我想做以下事情: 调用 URL 列表并处理从 url 返回的结果。我想先并行处理结果,然后将处理后的结果结合起来给我一个最终的结果。
伪代码如下:
var deferredAjaxCalls = [];
for (var i = 0; i < jobsListLength; i++) {
deferredAjaxCalls.push(
$.ajax({
url:"/myurl",
method:"POST",
contentType:"application/json",
dataType:"json",
data:mydata,
success:function(result){
//Some code here that is performance intensive
}
});
}
$.when.apply(this,deferredAjaxCalls).done(function(){
for (var k=0; k< arguments.length;k++){
//combine the results of the individual results of the
// success part of all the ajax calls and execute some more
//code synchronously
}
}).fail( function (jqXHR, status, error) {
//Log failed status
});
最初,我将所有代码从成功部分移到 $.when.apply() 中。但是,这导致性能非常慢,因为现在有很多密集的计算是同步执行的。所以我正在寻找一种方法来独立执行部分代码,并同步执行最后一段
我确实读过有关使用 Promise 的信息,但找不到任何示例,其中 Promise 与带有中间处理的 ajax 调用数组一起使用,然后最终在 when.apply() 块中进行同步
什么是解决这个问题的好方法?
谢谢!
【问题讨论】:
标签: javascript jquery ajax jquery-deferred