jQuery 中的 .catch 和 .fail 有什么区别?
What is the difference between .catch and .fail in jQuery?
.fail
的简短文档说:
Add handlers to be called when the Deferred object is rejected.
.catch
的简短文档完全相同:
Add handlers to be called when the Deferred object is rejected.
来源:http://api.jquery.com/category/deferred-object/
这两种方法接受的参数好像不一样,文档
.catch
表示 .catch
是 .then(null, fn)
的别名
在某些情况下我应该使用 .fail
而在其他情况下我应该使用 .catch
?
或者...如果我只有一个功能...以下命令是否可以互换并且它们仅出于 compatibility/historical 原因而存在?
a) .fail(fn)
b) .catch(fn)
c) .then(null, fn)
我创建了一个 jsFiddle:
https://jsfiddle.net/sq3mh9j5/
如果有区别,请提供一些例子,因为我是 jquery 的新手,还不熟悉所有的承诺条款。
为什么 .catch 的文档没有引用 .fail 的文档并阐明 difference/similarity?
编辑
我在 3.0 发行说明中发现了一些说明 .then 的行为发生了变化。
https://blog.jquery.com/2015/07/13/jquery-3-0-and-jquery-compat-3-0-alpha-versions-released/
尽管如此,我仍然不确定何时使用 .fail 以及何时使用 .catch。
所以我认为主要区别在于你从中得到了什么。
一个 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' 不会 运行.
我希望这个简单的例子能展示出不同之处。
catch
和 fail
略有不同,因为 catch
将 return 一个新的(已解决的)承诺,而 fail
将 return 原来的承诺。
// 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");
})
.fail
的简短文档说:
Add handlers to be called when the Deferred object is rejected.
.catch
的简短文档完全相同:
Add handlers to be called when the Deferred object is rejected.
来源:http://api.jquery.com/category/deferred-object/
这两种方法接受的参数好像不一样,文档
.catch
表示 .catch
是 .then(null, fn)
在某些情况下我应该使用 .fail
而在其他情况下我应该使用 .catch
?
或者...如果我只有一个功能...以下命令是否可以互换并且它们仅出于 compatibility/historical 原因而存在?
a) .fail(fn)
b) .catch(fn)
c) .then(null, fn)
我创建了一个 jsFiddle:
https://jsfiddle.net/sq3mh9j5/
如果有区别,请提供一些例子,因为我是 jquery 的新手,还不熟悉所有的承诺条款。
为什么 .catch 的文档没有引用 .fail 的文档并阐明 difference/similarity?
编辑 我在 3.0 发行说明中发现了一些说明 .then 的行为发生了变化。 https://blog.jquery.com/2015/07/13/jquery-3-0-and-jquery-compat-3-0-alpha-versions-released/ 尽管如此,我仍然不确定何时使用 .fail 以及何时使用 .catch。
所以我认为主要区别在于你从中得到了什么。
一个 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' 不会 运行.
我希望这个简单的例子能展示出不同之处。
catch
和 fail
略有不同,因为 catch
将 return 一个新的(已解决的)承诺,而 fail
将 return 原来的承诺。
// 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");
})