jQuery中的.catch和.fail有什么区别?



.fail的简短文档说:

添加在延迟对象被拒绝时要调用的处理程序。

.catch的简短文档完全相同:

添加在延迟对象被拒绝时要调用的处理程序。

来源: http://api.jquery.com/category/deferred-object/

两种方法接受的参数似乎不同,并且 doc.catch指出.catch.then(null, fn)的别名

是否有我应该使用.fail和其他情况下我应该使用.catch

或。。。如果我只有一个功能...以下命令是否可以互换,并且它们仅出于兼容性/历史原因而存在?

a) .fail(fn)
b) .catch(fn)
c) .then(null, fn)

我创建了一个jsFiddle:

https://jsfiddle.net/sq3mh9j5/

如果有区别,您能否提供一些示例,因为我是 jquery 的新手,还不熟悉所有承诺条款。

为什么 .catch 的文档没有引用 .fail 的文档并澄清差异/相似之处?

编辑我在 3.0 发行说明中发现了一些注释,说明 .then 的行为发生了变化。 https://blog.jquery.com/2015/07/13/jquery-3-0-and-jquery-compat-3-0-alpha-versions-released/尽管如此,我仍然不确定何时使用 .fail 以及何时使用 .catch。

catchfail略有不同,因为catch将返回一个新的(已解决的)承诺,而fail将返回原始承诺。

// This will only output "fail"
$.Deferred()
.reject(new Error("something went wrong"))
.fail(function() {
console.log("fail");
})
.then(function() {
console.log("then after fail");
})
// This will output "catch" and "then after catch"
$.Deferred()
.reject(new Error("something went wrong"))
.catch(function() {
console.log("catch");
})
.then(function() {
console.log("then after catch");
})

请注意,catch(fn)then(null, fn)的别名。

所以我认为主要的区别在于你从每个中得到了什么。

catch 允许您运行单个函数。

失败允许您运行许多函数。

除此之外,我同意你的发现。它们非常相似。

我添加了一个示例代码来展示 fail 将如何运行这两个函数,而 catch 将只运行一个函数。

$.ajax({
url: "abc"
}).done(function (data) {
}).fail(function () {
alert("a");
}, function () {
alert("b");
})
.catch(function () {
alert("c");
}, function () {
alert("d");
});

如果你运行这个,你会得到'a','b','c',然后'd'不会运行。

我希望这个简单的例子能展示差异。

最新更新