首页 > 解决方案 > jQuery .when() :是否有一个回调函数会在所有请求完成时触发,而不管它们的状态如何?

问题描述

我正在使用.when()jQuery 的方法并将多个 Ajax 请求作为参数传递。对于每一个ajax请求,如果失败并进入ajax的错误回调函数,我就是将服务器抛出的错误信息推送到一个全局数组中。

我想要的是一个回调,当所有请求完成时都会触发,无论所有请求是成功还是失败。在这个有问题的回调中,我将打印已推送到我的全局数组中的所有错误消息。

根据我的理解和我的测试,.then()只有在所有请求都已解决时.fail()才会触发回调,并且一旦我们有拒绝就会触发回调,这不允许我获得所有错误消息,而只能获得第一个错误消息。

sources = [ 'posts', 'comments', 'albums', 'photos' ];
requests = [];
ajaxErrors = [];
$.each(sources, function(idx, val) {
    requests.push(
        $.ajax({
            type    : 'GET',
            url     : 'https://myapi/' + val,
            success : function(data) {},
            error   : function(data) {
                ajaxErrors.push(data.message);
            }
        })
    );
});

$.when
    .apply($, requests)
    .then(function() {
        // Only fired when all requests are successful
    })
    .fail(function() {
        console.log(ajaxErrors);
        // If all request failed, ajaxErrors only has 1 element : ['Error retrieving posts, connexion timeout']
    });

标签: javascriptjqueryajaxasynchronous

解决方案


推荐阅读