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()
:
描述:过滤和/或链接延迟的实用方法.
据我所知,从历史上看,它们的行为略有不同,但在管道文档或当时的文档中,它甚至没有说这两个函数现在完全相同.
所以,这是我的两部分问题:
pipe()
和then()
不同之处?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()
方法.该doneFilter
和failFilter
功能过滤原始推迟的解决/拒绝的状态和值.该progressFilter
函数过滤对原始延迟notify
或notifyWith
方法的任何调用.这些过滤器函数可以返回一个新值以传递给promise.done()
或者.fail()
回调,或者它们可以返回另一个可观察对象(Deferred,Promise等),它将其已解析/拒绝的状态和值传递给promise的回调.如果使用null
或未指定使用过滤器功能,则将使用与原始值相同的值来解析或拒绝承诺.
归档时间: |
|
查看次数: |
14310 次 |
最近记录: |