小编典典

jQuery 延迟和承诺 - .then() 与 .done()

all

我一直在阅读有关 jQuery 延迟和承诺的信息,但我看不出使用.then()&.done()成功回调之间的区别。我知道Eric
Hynds
提到了这一点.done().success()映射到相同的功能,但我猜也是如此,.then()因为所有回调都是在成功操作完成时调用的。

谁能告诉我正确的用法?


阅读 158

收藏
2022-03-13

共1个答案

小编典典

当 deferred 被解决时,附加到的回调done()将被触发。当 deferred 被拒绝时,附加到的回调fail()将被触发。

在 jQuery 1.8 之前,then()只是语法糖:

promise.then( doneCallback, failCallback )
// was equivalent to
promise.done( doneCallback ).fail( failCallback )

从 1.8 开始,then()它是一个别名pipe()并返回一个新的 Promise,有关pipe().

success()并且error()仅在jqXHR调用返回的对象上可用ajax()。它们分别是done()和的简单别名fail()

jqXHR.done === jqXHR.success
jqXHR.fail === jqXHR.error

此外,done()不限于单个回调,并且会过滤掉非函数(尽管版本 1.8 中存在字符串错误,应在 1.8.1 中修复):

// this will add fn1 to 7 to the deferred's internal callback list
// (true, 56 and "omg" will be ignored)
promise.done( fn1, fn2, true, [ fn3, [ fn4, 56, fn5 ], "omg", fn6 ], fn7 );

也一样fail()

2022-03-13