jquery $.when() .then() 和 .done() 之间的区别
Posted
技术标签:
【中文标题】jquery $.when() .then() 和 .done() 之间的区别【英文标题】:jquery $.when() difference between .then() and .done() 【发布时间】:2012-12-24 21:59:03 【问题描述】:我试图了解两者之间的区别
$.when(...).then(...)
$.when(...).done(...)
在 jQuery 中。据我了解,它们都是在内部对象完成加载时执行的。但是有什么区别。示例将不胜感激。
【问题讨论】:
jQuery deferreds and promises - .then() vs .done() 的可能重复项 【参考方案1】:.done()
只有成功回调。
.then()
有成功和失败回调。
从 jQuery 1.8 开始,
deferred.then()
方法返回一个新的承诺 可以过滤延迟通过的状态和值 函数,替换现在已弃用的deferred.pipe()
方法。
deferred.done()
方法接受一个或多个参数,所有参数 可以是单个函数,也可以是函数数组。由于
deferred.done()
返回延迟对象,其他方法 延迟对象可以链接到这个对象,包括附加的.done()
方法。当 Deferred 被解决时, doneCallbacks 是 使用提供给 resolve 或 resolveWith 的参数执行 按添加顺序调用方法。
【讨论】:
是的,您可以将它用于失败回调。 deferred.then( doneCallbacks, failCallbacks ) 这不太正确。是的,.then()
有一个方法签名,允许传递失败回调和成功回调。更重要的一点是.then()
返回一个new的promise对象,.done()
返回的是同一个promise对象。至少这是基本答案。有关更完整的答案,请参阅由 Raphael 链接到原始问题的this question 上的答案
一个非常重要的区别是上面@Anduril 的评论。使用then()
,您将获得一个新的承诺,因此您可以链接不同的操作。使用这个你的代码可以简化很多。
@Anduril 你应该让你的评论成为答案,因为它包含非常重要的概念。
@Benj 当时也许我应该有,但 Gurpreet 已经用更多信息编辑了他的答案,这有助于澄清它,我认为这可能会使水变得浑浊。现在我会把它作为对原始答案的评论以上是关于jquery $.when() .then() 和 .done() 之间的区别的主要内容,如果未能解决你的问题,请参考以下文章
有人可以清楚地解释 jQuery.when() 和 deferred.then() 的工作原理吗?
jquery - 使用 .done()、.then() 和 .when() 以给定顺序发出 ajax 请求