jQuery Deferred有两个函数可用于实现函数的异步链接:
then()
deferred.then( doneCallbacks, failCallbacks ) Returns: DeferreddoneCallbacks解析Deferred时调用的函数或函数数组.
failCallbacks拒绝延迟时调用的函数或函数数组.
pipe()
deferred.pipe( [doneFilter] [, failFilter] ) Returns: PromisedoneFilter解析Deferred时调用的可选函数.
failFilter拒绝Deferred时调用的可选函数.
我知道then()已经存在了一段时间,pipe()因此后者必须增加一些额外的好处,但正是这种差异恰恰在于我.两者都采用了几乎相同的回调参数,尽管它们的名称不同,返回a Deferred和返回a 之间的区别Promise似乎很小.
我已经一遍又一遍地阅读官方文档,但总是发现它们太"密集"而无法真正地包围我的搜索已经找到了很多关于这个或另一个特征的讨论,但我没有发现任何真正澄清不同的东西每个人的利弊.
那么什么时候使用then它更好,pipe什么时候使用更好?
Felix的出色答案确实有助于阐明这两个功能的区别.但我想知道是否有时候功能性then()比那更好pipe().
很明显,它pipe()比then()以前更强大,似乎前者可以做后者可以做的任何事情.使用的一个原因then()可能是它的名称反映了它作为处理相同数据的一系列函数的终止的作用.
但是有一个用例需要then()返回由于它返回一个新的而Deferred无法完成的原始文件吗?pipe()Promise
jquery asynchronous decoupling jquery-chaining jquery-deferred