首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery: deferred.always()和deferred.then()有什么区别?

jQuery: deferred.always()和deferred.then()有什么区别?
EN

Stack Overflow用户
提问于 2012-09-16 15:29:49
回答 4查看 11.5K关注 0票数 30

在我看来两人做的事情是一样的。

医生:

  • deferred.always()
  • deferred.then()
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-09-16 15:33:13

deferred.then()似乎允许您为成功和失败传递两个单独的回调,而deferred.always()则接受n数量的回调,这些回调都将被调用,而不管初始事件的结果如何。

我认为在初始事件的成功/失败不重要的情况下使用deferred.always()

票数 35
EN

Stack Overflow用户

发布于 2012-09-16 15:34:37

使用.then(),您可以为解析$.Deferred (done)提供单独的回调(done),为拒绝$.Deferred (fail)提供另一个回调。

另一方面,.always()允许您提供一个总是被执行的回调,无论$.Deferred是否已被解析或拒绝。换句话说,在此回调中,AJAX调用是否失败或是否已成功执行并不重要。

当我希望代码每次运行时,我倾向于将代码放入.always()中,并且不依赖于$.Deferred是否成功地被解析。例如,清除AJAX加载指示符或隐藏进度条。使用.then(),您可以得到如下内容:

代码语言:javascript
复制
$.get("/some/url").then(function () { // done callback
  $(".progress-bar").hide();
}, function () { // fail callback
  $(".progress-bar").hide();
});

如果使用.always(),则只需要一个回调,因为您总是希望隐藏进度条,不管$.Deferred是解决了还是拒绝了:

代码语言:javascript
复制
$.get("/some/url").always(function () {
  $(".progress-bar").hide();
});
票数 7
EN

Stack Overflow用户

发布于 2012-09-24 15:15:29

在jQuery 1.8之前:.always(fn)等同于.then(fn, fn)

在jQuery 1.8中,.always(fn).then(fn, fn)相似,但返回的内容不同(详见http://api.jquery.com/deferred.then/ )。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12448171

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档