使用“延迟”处理的错误

问题描述:

Deferred对象具有两个主回调池,即doneCallbacksfailCallbacks。两个池都是“线性的”:回调按照它们的顺序依次存储。使用“延迟”处理的错误

这种线性结构似乎违背了处理错误时必须考虑的“树状”结构。每一步都有两种情况:失败和通过。

if(err) { 
    // stuff 
    if(err) { 
      // stuff 
    } else { 
      // stuff 
    } 
else { 
    // stuff 
    if(err) { 
      // stuff 
    } else { 
      // stuff 
    } 
} 

看来,由于Deferred S上施加线性的,他们不是很适合错误处理。我可以忽略一些东西吗

+0

你想达到什么目的? – 2011-12-13 21:12:44

这是一个有点罗嗦,但是这是从jQuery文档$.when()

在多个延迟对象传递给jQuery.when的情况下, 该方法返回的承诺,从一个新的“主人”延迟对象 跟踪所有延迟的聚合状态,它已通过 。 只要 延迟结果被拒绝,该方法将解决其主数据库延迟一旦所有 解决,或拒绝主数据库延迟。如果解决了主延迟问题,那么将 传递给传递给 jQuery.when的所有延迟解析值。例如,当Deferreds是jQuery.ajax() 请求时,参数将为请求的jqXHR对象,它们在参数列表中给出的顺序为 。

在多Deferreds情况下Deferreds之一被拒绝, jQuery.when立即触发对于其主站的failCallbacks 推迟。请注意,有些延迟可能仍然没有解决,这一点在 。如果您需要为此 大小写执行其他处理,例如取消所有未完成的ajax请求,则可以在封闭中保留 引用基础jqXHR对象,并且可以在failCallback中检查/取消它们。

来源:http://api.jquery.com/jquery.when/

所以,如果一个deferred对象解析错误,那么master deferred火灾failCallbacks,它是由你来决定如何处理可能未解决deferred就做。