【发布时间】:2017-09-29 03:40:19
【问题描述】:
我有一个包含多个 ajax 请求的循环。 每个 ajax 都是通过总是回调来管理的。 每个 ajax 都被推送到 promises 数组中。 最后 $.when 总是被使用。
如果所有$.ajax 都成功了$.when.apply($, promises).always(...);
当所有$.ajax 调用成功时调用。
但例如在 3 $.ajax 调用第二个失败时,$.when.apply($, promises).always(...); 仅在第二个之后触发,而不是在所有 3 $.ajax 调用成功时触发。
有什么帮助吗? 跟着代码
$(".upload_all").bind("click", function() {
var confirmed_count = 0;
var error_count = 0;
var promises = [];
to_uploads.each(function(index,val) {
var elem = $(this);
var promise = $.ajax({
url: "/upload/storeUploadedFile",
type: 'POST',
}).always(function(data_or_jqXHR, textStatus, jqXHR_or_errorThrown) {
if (textStatus === "success") {
// ..
} else {
// ..
}
});
promises.push(promise);
});
$.when.apply($, promises)
.always(function() {
console.log("Promises Always! ") // do other stuff
});
}
【问题讨论】:
-
.always 甚至与 jquery 承诺相关吗?是的,我猜我只是从来没有在那种情况下使用过它。 jquery 1.6+
-
好的,所以,你的 $.when() 创建了一个可以解决或拒绝的承诺。如果其中一个承诺被拒绝,整个事情会立即拒绝,跳过任何尚未完成的事情。这表明你有一个承诺,如果它没有达到他们所有人的目的,那么它就会失败。如果您想等待它们全部运行而不考虑失败,则必须拦截失败并将其转换为成功。
标签: javascript jquery ajax promise