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 请求

jQuery承诺,如何检查then()是否真的在when()之后?

有条件地添加到 jQuery .when

oracle when 和 then怎么用!!!

JS/jQuery 承诺