我一直在阅读有关 jQuery 延迟和承诺的信息,但我看不出使用.then()&.done()成功回调之间的区别。我知道Eric Hynds提到了这一点.done()并.success()映射到相同的功能,但我猜也是如此,.then()因为所有回调都是在成功操作完成时调用的。
.then()
.done()
.success()
谁能告诉我正确的用法?
当 deferred 被解决时,附加到的回调done()将被触发。当 deferred 被拒绝时,附加到的回调fail()将被触发。
done()
fail()
在 jQuery 1.8 之前,then()只是语法糖:
then()
promise.then( doneCallback, failCallback ) // was equivalent to promise.done( doneCallback ).fail( failCallback )
从 1.8 开始,then()它是一个别名pipe()并返回一个新的 Promise,有关pipe().
pipe()
success()并且error()仅在jqXHR调用返回的对象上可用ajax()。它们分别是done()和的简单别名fail():
success()
error()
jqXHR
ajax()
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()。