Javascript - 错误处理 - Promise数组

时间:2014-01-03 12:33:35

标签: javascript jquery jquery-deferred

处理ajax响应数组的正确方法是什么?我的意思是,因为它是一个承诺数组,当其中一个ajax调用失败时会发生什么?

$.when.apply($, array_of_promises).then(
    successCallback function(){
       // Loop over the arguments to control errors??
    },
    failCallback function(){
    }
);

我在哪里可以检测到错误?我是否在'错误处理功能'中得到它?我是否必须检查循环参数变量的'success function'以检查是否已成功完成所有ajax调用?

2 个答案:

答案 0 :(得分:1)

Deferred.then包含.done().fail()。所以我的猜测是你的第一个回调为success/.done(),第二回调为error/.fail()

$.when.apply(array_of_promises).then(successCallback, failCallback);

successCallback function(){
    ...
}

failCallback function() {
    ...
}

Api - $.then()

答案 1 :(得分:1)

$.when.apply(array_of_promises)

请注意,此处缺少apply的第一个参数,传递$null

  

当其中一个ajax调用失败时会发生什么?

jQuery.when docs说:

  

如果将多个Deferred对象传递给jQuery.when,   该方法从新的“主”延迟对象返回Promise   它跟踪所有Deferred的聚合状态   通过。 该方法将尽快解决其主延期   延迟解决,或拒绝主人延期一个   延期被拒绝。如果主Deferred已解决,则为   传递了传递给的所有Deferred的已解析值   jQuery.when。例如,当Deferreds是jQuery.ajax()时   请求,参数将是请求的jqXHR对象   他们在参数列表中给出的顺序。

     

在多个Deferreds案例中,其中一个Deferreds被拒绝,   jQuery.when立即为其master发出failCallbacks   递延。请注意,某些延迟可能仍未解决   那一点。如果您需要为此执行其他处理   如果取消任何未完成的ajax请求,你可以保留   对闭包中的底层jqXHR对象的引用   在failCallback中检查/取消它们。

  

我在哪里可以检测到错误?我是否在'错误处理功能'中得到它?

  

我是否必须检查循环参数变量的'success function'以检查是否已成功完成所有ajax调用?

没有。如果调用错误处理程序,则不会成功。只有在没有错误时才会调用成功函数。