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

Ste*_*fan 16 jquery promise deferred

短文.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)
Run Code Online (Sandbox Code Playgroud)

我创建了一个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.

Jac*_*don 8

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");
  })
Run Code Online (Sandbox Code Playgroud)
// 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");
  })
Run Code Online (Sandbox Code Playgroud)

请注意,这catch(fn)是别名then(null, fn).

  • @Stefan我建议不要使用`fail`和`done`. (4认同)