Javascript 承诺的单一错误处理程序
jquery返回的承诺是否提供了在最后一个地方处理所有错误的条款。大概是这样的: 如果是这样的话,我会很感激一些代码,可能是原始的Javascript 承诺的单一错误处理程序,javascript,jquery,Javascript,Jquery,jquery返回的承诺是否提供了在最后一个地方处理所有错误的条款。大概是这样的: 如果是这样的话,我会很感激一些代码,可能是原始的$.deferred,.done和.fail 文件: 尝试切换到无效的url以在错误回调中结束 尝试切换到无效的url以在错误回调中结束 注意:答案假设jQuery 1.8+。在jQuery1.8之前,jQuery的承诺/延迟实现不是这样工作的 .done()/.fail()和.then()函数之间有一个细微的区别——从1.8开始,.then()的主要用途是应用过
$.deferred
,.done
和.fail
文件:
尝试切换到无效的url以在错误回调中结束
尝试切换到无效的url以在错误回调中结束
注意:答案假设jQuery 1.8+。在jQuery1.8之前,jQuery的承诺/延迟实现不是这样工作的
.done()
/.fail()
和.then()
函数之间有一个细微的区别——从1.8开始,.then()
的主要用途是应用过滤器,而.done()
.done()
和.fail()
返回相同的承诺(因此调用.done().done().done()
只会在初始承诺中添加更多回调),而.then()
会为过滤器返回的值返回一个新的承诺(因此。然后(成功)
返回一个新的承诺,该承诺将使用success返回的值进行解析)
可以在以下位置找到这种差异的演示:
因此,要复制与该映像相同的功能,您需要:
Deferred.then(success_a)
.then(success_b)
.then(success_c, failure);
遗憾的是,jQuery文档在这个主题上有点粗略,但是您可以在
在接受的答案中使用
$。when()
也会起作用,因为它将返回一个新的承诺,当任何给定的承诺被拒绝时,该承诺将被拒绝,并使用所有承诺的组合数据成功解析。注意:答案假设jQuery 1.8+。在jQuery1.8之前,jQuery的承诺/延迟实现不是这样工作的
.done()
/.fail()
和.then()
函数之间有一个细微的区别——从1.8开始,.then()
的主要用途是应用过滤器,而.done()
.done()
和.fail()
返回相同的承诺(因此调用.done().done().done()
只会在初始承诺中添加更多回调),而.then()
会为过滤器返回的值返回一个新的承诺(因此。然后(成功)
返回一个新的承诺,该承诺将使用success返回的值进行解析)
可以在以下位置找到这种差异的演示:
因此,要复制与该映像相同的功能,您需要:
Deferred.then(success_a)
.then(success_b)
.then(success_c, failure);
遗憾的是,jQuery文档在这个主题上有点粗略,但是您可以在
在接受的答案中使用
$。when()
也会起作用,因为它将返回一个新的承诺,当任何给定的承诺被拒绝时,该承诺将被拒绝,并使用所有承诺的组合数据成功解析。如果您连锁调用,您可以在末尾附加一个处理程序,该处理程序可以捕获链中任何位置的拒绝。如果您随后调用了链,则可以在末尾附加一个处理程序,该处理程序可以捕获链中任何位置的拒绝。同意答案,只需注意一点-jQuery的$。when()
与when()不同
在该伪javascript中-伪javascript有一个明确的执行顺序(首先是我的承诺,然后是成功a,然后是成功b…)+1用于向我介绍何时,但它包含在内部,而我更希望有一个语法,如(或者可能是默认行为?)xhr1.done(xhr2.fail)(/*在xhr失败时调用*/
您也可以使用它们。.done
和.fail
只是的快捷方式。然后(成功,失败)
@Sacho谢谢这是我一直在寻找的答案。文档中提到当延迟被拒绝时,会调用失败回调。回调是按照添加的顺序执行的,但我不清楚它是否会以这种方式工作。如果你发布它,我会很高兴标记为答案。实际上,我的评论是错误的-我已经审阅过了同意这个答案,只有一个小注释——jQuery的$。when()
与伪javascript中的when()
不同——伪javascript有一个明确的执行顺序(首先是我的承诺,然后是成功a,然后是成功b…).1,用于向我介绍when,但它包含在内部,而我更希望有类似于(或者可能是默认行为?)的语法xhr1.done(xhr2).fail(/*在xhr失败时调用)*/
您也可以使用它们。.done
和.fail
只是的快捷方式。然后(成功,失败)
@Sacho谢谢这是我一直在寻找的答案。文档中提到当延迟被拒绝时,会调用失败回调。回调是按照添加的顺序执行的,但我不清楚它是否会以这种方式工作。如果你发布它,我会很高兴标记为答案。实际上,我的评论是错误的-我已经审阅过了查看文档后,我找到了一个合适的答案。谢谢sacho。为我节省了大量时间。fiddle和all的回答非常好。这可能就是你的意思(def2而不是def):谢谢sacho。为我节省了大量时间。fiddle和all的回答非常好。这可能就是你的意思(def2而不是def):