【问题标题】:jQuery Deferred's done vs success callbackjQuery Deferred 的完成与成功回调
【发布时间】:2017-08-08 14:22:32
【问题描述】:

以下回调方法有技术上的区别吗?

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

【问题讨论】:

  • .then() 返回一个新的链式承诺。 .done() 没有。 .then() 更接近于承诺标准(在 JQ 3.0 中它实际上是标准的,在以前的版本中并不完全)。 .done() 完全是 jQuery 特定的设计,不受任何 Promise 标准的约束。

标签: javascript jquery jquery-deferred


【解决方案1】:

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>

【讨论】:

    猜你喜欢
    • 2013-02-12
    • 2011-09-09
    • 1970-01-01
    • 2017-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-03
    • 2020-01-19
    相关资源
    最近更新 更多