更新:这个问题现在已经过时了,因为文档是准确的并且是最新的。
我一直在探索 jQuery Deferred/Promise API,但我对 jQuery 文档pipe()
和then()
哲学文档之间的差异感到非常困惑。我发现 pipe() 只是 jQuery 1.8 的 then() 的别名。
来自 jQuery 源代码:
// Keep pipe for back-compat
promise.pipe = promise.then;
然而,文档是完全不同的pipe()
,then()
因为它们被认为具有完全不同的用途。
说明then()
:
描述:添加在解析或拒绝 Deferred 对象时要调用的处理程序。
说明pipe()
:
描述:过滤和/或链接延迟的实用方法。
我知道从历史上看,它们的行为略有不同,但是在pipe 的整个文档或then 的文档中,甚至没有说这两个函数现在做的事情完全相同。
所以,这是我的两部分问题:
- 为什么 jQuery 1.8 之间的文档
pipe()
有所then()
不同? - 为什么
then()
返回一个新的延迟对象?这种行为完全没有记录(文档只是说它返回一个 Deferred,而不是它是一个新的)。我知道这样做是有用的(即实现pipe()
's 的所有功能),但从哲学上讲,为什么会这样呢?then()
鉴于(附加处理程序)的描述,这是不必要的。
更新
我什至会说这些then()
文档具有误导性和不准确:
由于 deferred.then返回延迟对象,延迟对象的其他方法可以链接到这个,包括附加的 .then() 方法。
也许它只是含糊不清,但它意味着它返回您调用then()
链接的延迟对象,而实际上它返回一个全新的对象......
再次更新
似乎文档只是错误/过时!所以这回答了为什么文档没有提到它们是同一件事。但是,我的第二个问题仍然存在。原因是简单地then()
返回一个新的延迟,以便它pipe()
可以等效吗?