jQuery Deferred完成vs成功回调

时间:2017-03-17 06:20:51

标签: javascript jquery deferred complete

以下回调方法之间是否存在任何技术差异?

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等。我是对的吗?

complete / done方法是否有fail等值?

根据您的经验,在某些情况下,是否比其他人更优先/更优先?

如果我同时使用successdone / then,那么一个会在另一个之前运行,或者无法确定哪个会在另一个之前运行吗?或者完全不推荐使用successdone / then

提前谢谢大家。

1 个答案:

答案 0 :(得分: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>
&#13;
&#13;
&#13;

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