jQuery的Deferred有两个函数可以用来实现函数的asynchronous链接: then() deferred.then( doneCallbacks, failCallbacks ) Returns: Deferred doneCallbacks在parsingDeferred时调用的函数或函数数组。 failCallbacks延迟被拒绝时调用的函数或函数数组。 pipe() deferred.pipe( [doneFilter] [, failFilter] ) Returns: Promise doneFilterparsingDeferred时调用的可选函数。 failFilter当Deferred被拒绝时调用的可选函数。 我知道then()已经比pipe()长了一些,所以后者必须增加一些额外的好处,但是这个差别正是我所没有的。 虽然两者的名字不同,但它们的callback参数几乎相同,返回Deferred和返回Promise的差别似乎很小。 我一遍又一遍地读了官方文档,但总是发现它们太“密集”,真的把我的头围绕着,search已经发现了很多关于这个function的讨论,但是我还没有发现任何能够真正澄清不同的东西每个的利弊。 那么什么时候使用更好,什么时候使用pipe更好呢? 加成 菲利克斯的出色答案确实有助于澄清这两个function的不同之处。 但是我想知道是否有时候then()的function优于pipe() 。 很明显pipe()比pipe()更强大,前者似乎可以做任何事情。 使用then()一个原因可能是它的名字反映它的作用是终止处理相同数据的函数链。 但是是否有一个用例需要then()返回原来的Deferred ,由于它返回一个新的Promise而无法用pipe()完成?