使用“延迟”处理的错误
问题描述:
Deferred
对象具有两个主回调池,即doneCallbacks
和failCallbacks
。两个池都是“线性的”:回调按照它们的顺序依次存储。使用“延迟”处理的错误
这种线性结构似乎违背了处理错误时必须考虑的“树状”结构。每一步都有两种情况:失败和通过。
if(err) {
// stuff
if(err) {
// stuff
} else {
// stuff
}
else {
// stuff
if(err) {
// stuff
} else {
// stuff
}
}
看来,由于Deferred
S上施加线性的,他们不是很适合错误处理。我可以忽略一些东西吗
答
这是一个有点罗嗦,但是这是从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
就做。
你想达到什么目的? – 2011-12-13 21:12:44