pipe() 和 then() 文档与 jQuery 1.8 中的现实
pipe() and then() documentation vs reality in jQuery 1.8
更新:这个问题现在已经过时了,因为文档是准确和最新的。
我一直在探索jQuery Deferred/Promise API,我对pipe()
和then()
之间的哲学和jQuery文档中的差异感到非常困惑。 我发现pipe()只是jQuery 1.8的then()的别名。
来自jQuery源代码:
// Keep pipe for back-compat
promise.pipe = promise.then;
然而,pipe()
和then()
的文档完全不同,因为它们应该具有完全不同的用途。
then()
的描述 :
说明:添加解析或拒绝延迟对象时要调用的处理程序。
pipe()
的描述:
说明:用于筛选和/或链接延迟的实用工具方法。
我知道从历史上看,它们的行为略有不同,但是在整个管道文档或当时的文档中,它甚至没有说这两个函数现在做完全相同的事情。
所以,这是我的两部分问题:
- 为什么
pipe()
和then()
之间的文档在 jQuery 1.8 中有所不同? - 为什么
then()
返回一个新的延迟对象? 这种行为是完全没有记录的(文档只是说它返回了一个延迟,而不是一个新的)。 我知道这样做是有用的(即实现pipe()
的所有功能),但从哲学上讲为什么会这样? 鉴于then()
(附加处理程序)的描述,这是不必要的。
更新
我什至会说then()
文档具有误导性和不准确:
由于 deferred.then 返回延迟对象,因此延迟对象的其他方法可以链接到此方法,包括其他 .then() 方法。
也许它只是模糊的,但它暗示它返回你调用then()
进行链接的延迟对象,而实际上它返回一个全新的对象......
再次更新
似乎文档只是错误/过时! 所以这回答了为什么文档没有提到它们是同一件事。 但是,我的第二个问题仍然存在。 then()
返回新的延迟的原因是否只是为了使其和pipe()
可以等效?
jQuery 1.8 的文档更新尚未联机。
根据最近的这篇博文:
我们正在更新所有 更改为 1.8,但现在您可以参考 jQuery 1.8 公告以查看更改的内容。
更新:是的,then()
返回一个新Deferred
,因为它等效于现在pipe()
。我很有信心文档更新很快就会澄清这一点。
为完整性而进一步更新:文档最近更新了,现在说 pipe():
弃用通知:从 jQuery 1.8 开始,
deferred.pipe()
方法已被弃用。取代它的deferred.then()
方法应该 改为使用。
对于 then():
在 jQuery 1.8 之前,参数可以是一个函数或函数数组。
[...]
从 jQuery 1.8 开始,
deferred.then()
方法返回一个新的承诺,该承诺可以通过 函数,替换现已弃用的deferred.pipe()
方法。这doneFilter
和failFilter
函数过滤原始延迟的 已解决/已拒绝状态和值。progressFilter
函数 过滤对原始延期notify
或notifyWith
的任何调用 方法。这些过滤器函数可以返回要传递的新值 以及承诺的.done()
或.fail()
回调,或者他们可以 返回另一个可观察对象(延迟、承诺等),它将 将其已解决/已拒绝状态和值传递给承诺的 回调。如果使用的过滤器函数为null
或未指定, 承诺将使用与 源语言。
- 使用promise和mongoose对文档进行排序
- document.open/document.write没有正确地清除chrome中的文档——这是chrome的错误吗
- Ajax请求文档就绪会导致jquery加载缓慢
- MongoDB (php) - 以数组而不是多个属性的形式返回文档属性
- 谷歌文档表面引擎
- 来自文档或下一个静态父级的事件委派
- 如何将childNodes用于XML文档
- 文档就绪提供了错误的选择器高度
- 将当前用户的 ID 推送到 meteorjs 中集合/文档的内部数组
- 未捕获的语法错误:无法在“文档”上执行“查询选择器”
- BrowserId登录请求在文档加载时被调用
- 从Javascript和Php变量创建Html模板文档
- 如何通过谷歌应用程序脚本从谷歌文档中的位置确定命名范围
- 在jquery文档准备好之前加载Modernizr
- 如何判断何时将dom节点添加到文档中
- 无法获取文档.GetElementById工作正常
- 为什么是文档.旧版应用程序中的DOM-object.properties为null
- 有没有一种方法可以在没有文档或jQuery的情况下使用javascript解码html实体
- 是否存在Javascript Liferay Service库的文档?如何处理错误情况
- pipe() 和 then() 文档与 jQuery 1.8 中的现实