javascript - jQuery Deferred 的完成回调与成功回调

标签 javascript jquery jquery-deferred

以下回调方法之间有技术差异吗?

1

$.ajax({
  ...
  success: function(data, textStatus, jqXHR) {
    foo(data);
  },
  error: function (jqXHR, textStatus, errorThrown ) {
    bar();
  }
});

2

$.ajax(...)
  .done(function(data) {
    foo(data);
  })
  .fail(function() {
    bar();
  });

3

$.ajax(...)
  .then(function(data) {
    foo(data);
  }, function() {
    bar();
  });

由于经验不足,我不确定它们是将data传递给foo()的正确示例。 (如有错误,请指正。)

使用done/fail,我们无法跟踪其他数据,例如jqXHRtextStatuserrorThrown 等。我说得对吗?

done/fail 方法是否有一个 complete 等价物?

根据您的经验,在某些情况下,是否有一个比其他更好/更受青睐?

如果我同时使用 successdone/then,其中一个肯定会先于另一个运行,还是不能确定哪个会先运行肯定跑在对方之前吗?或者不建议同时使用 successdone/then

最佳答案

jQuery .done() 之间的一个区别.then() 是返回值,可以在 .then()

处更改

参见jQuery deferreds and promises - .then() vs .done()

$.Deferred(function(dfd) {
  dfd.resolve(1)
})
.done(function(n) {
  return n + 1
})
.then(function(res) {
  console.log(res) // 1
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js">
</script>

$.Deferred(function(dfd) {
  dfd.resolve(1)
})
.then(function(n) {
  return n + 1
})
.then(function(res) {
  console.log(res) // 2
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js">
</script>

关于javascript - jQuery Deferred 的完成回调与成功回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42850538/

相关文章:

Javascript - 自定义对象初始化数组

javascript - Angular 无法绑定(bind)到 'dragula',因为它不是 'ul' 的已知属性

jquery - 重构jquery选择器表达式

javascript - 如何更改 swiper.js 中 swiper 的延迟?

javascript - Q.defer() 和 Promise() 的区别

javascript - 如何将 Action 创建者分离到单独的文件中?

javascript - jQuery Ajax : FormData is returning 403 error for base64 data

jquery - 如何使用 TypeScript 和 jquery.d.ts 创建通用(无效)JQueryDeferred 对象

jQuery 延迟 then() 在解析之前调用

javascript - 分数总是添加到第一人称