在jQuery 1.8中使用pipe()和then()文档与现实

Ada*_*son 30 javascript jquery jquery-deferred

更新:由于文档准确且最新,此问题现在已过时.

我已经探索了一下jQuery的递延/无极API和我对之间的差异非常困惑pipe()then()哲学和jQuery的文档.我发现从jQuery 1.8开始,pipe()只是then()的别名.

来自jQuery源码:

// Keep pipe for back-compat
promise.pipe = promise.then;
Run Code Online (Sandbox Code Playgroud)

然而,文档完全不同pipe(),then()因为它们被认为具有完全不同的用途.

说明then():

描述:添加在解析或拒绝Deferred对象时要调用的处理程序.

说明pipe():

描述:过滤和/或链接延迟的实用方法.

据我所知,从历史上看,它们的行为略有不同,但在管道文档或当时的文档中,它甚至没有说这两个函数现在完全相同.

所以,这是我的两部分问题:

  1. 为什么jQuery 1.8 之间的文档pipe()then()不同之处?
  2. 为什么then()返回一个新的延迟对象?这种行为完全没有记录(文档只是说它返回Deferred,而不是它是一个新的).我知道这样做有用(即实现所有pipe()的功能),但从哲学上讲,为什么会这样呢?鉴于then()(附加处理程序)的描述,这是不必要的.

更新

我甚至会说这些then()文档具有误导性和不准确性:

由于deferred.then 返回延迟对象,因此延迟对象的其他方法可以链接到此方法,包括其他.then()方法.

也许它只是模糊,但它意味着它返回你then()为链接调用的延迟对象,而实际上它返回一个全新的对象....

再次更新

似乎文档完全错误/过时了!所以这就解释了为什么文档没有提到它们是同一个东西.但是,我的第二个问题仍然存在.原因then()是简单地返回一个新的延迟,以便它pipe()可以变得等效吗?

Fré*_*idi 18

jQuery 1.8的文档更新尚未在线.

根据最近的博客文章:

我们正在更新所有对1.8的更改的API文档,但是现在您可以参考jQuery 1.8公告中的更改日志 来查看更改内容.

更新:是的,then()返回一个新的,Deferred因为它等同于pipe()现在.我非常有信心文档更新很快会澄清这一点.

进一步更新完整性:文档最近更新,现在说管道():

弃用通知:从jQuery 1.8开始,该deferred.pipe()方法已弃用.deferred.then()应该使用替换它的方法.

对于then():

在jQuery 1.8之前,参数可以是函数或函数数组.

[...]

从jQuery 1.8开始,该deferred.then()方法返回一个新的promise,它可以通过函数过滤延迟的状态和值,替换现在已弃用的deferred.pipe()方法.该 doneFilterfailFilter功能过滤原始推迟的解决/拒绝的状态和值.该progressFilter函数过滤对原始延迟notifynotifyWith 方法的任何调用.这些过滤器函数可以返回一个新值以传递给promise .done()或者.fail()回调,或者它们可以返回另一个可观察对象(Deferred,Promise等),它将其已解析/拒绝的状态和值传递给promise的回调.如果使用null或未指定使用过滤器功能,则将使用与原始值相同的值来解析或拒绝承诺.

  • 除非我抽烟,实际上有人正在更新文档:)我即将发表评论然后一切都不同了. (4认同)
  • @FrédéricHamidi请不要 - 有关变化的有用评论. (4认同)
  • @FrédéricHamidi - 为什么在GD的名字中你会认为这个问题"过于本地化"? (4认同)
  • @FrédéricHamidi非常公平,我认为"文档是错的"是一个很好的解释,你知道,为什么他们错了! (2认同)