.fail
的简短文档说:
添加要在拒绝Deferred对象时调用的处理程序。
和.catch
的简短文档完全相同:
添加要在拒绝Deferred对象时调用的处理程序。
来源:http://api.jquery.com/category/deferred-object/
这两种方法所接受的论点似乎是不同的,而且是
.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。
答案 0 :(得分:7)
catch
和fail
略有不同,因为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");
})
答案 1 :(得分:2)
所以我认为主要区别在于你从中获得的每一个。
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'不会运行。
我希望这个简单的例子展示出差异。