【发布时间】:2015-09-25 17:13:15
【问题描述】:
我在 for 循环中进行 AJAX 调用,我想等到所有调用都完成后再做某事。
我正在尝试使用 Promise,但我缺少一些东西,因为它不起作用。如果触发错误,我的when 调用会立即触发,我不想这样做。我想等到所有调用都完成,无论是成功还是错误。
所有调用完成后,我想要成功的条目数和错误数组。
这是我的代码:
for (var i = 0; i < resp.propertiesList.length; i++) {
var documentToSend = {
indexName: indexName,
type: type,
jsonContent: blabla
};
var promise = _TOOLS.Ajax({
type: 'POST',
url: urlTest,
data: documentToSend,
contentType: 'application/x-www-form-urlencoded',
dataType: 'json',
success: function (dataResponse) {
numberOfEntriesSuccess++;
},
error: function (xhr, ajaxOptions, errorThrown) {
var errorResponse = JSON.parse(xhr.responseText);
errorsList.push(errorResponse.ExceptionMessage + ". Skipping line.");
}
});
promises.push(promise);
}
//When all ajax calls are finished, load report page and display informations
$.when.apply($, promises).done(function() {
console.log("DONE " + promises.length);
console.log(errorsList);
})
我尝试过使用.done、.then、.always,但是当我愿意时,它们都没有触发。
我在互联网上阅读了很多关于承诺的内容,但我肯定错过了一些东西,这让我发疯了。
感谢您的帮助!
【问题讨论】:
-
这是(很不幸)
when()的工作方式——即。一旦 1 个请求失败,它就会立即跳转到错误处理程序并停止处理进一步的请求。唯一真正的替代方法是从 jQuery 源代码原型/创建$.when的替代版本,该版本在错误时静默失败。
标签: javascript jquery ajax promise