【问题标题】:Understanding Problem - Jquery Deferred chaining理解问题 - Jquery 延迟链接
【发布时间】:2019-08-30 18:37:59
【问题描述】:
function ajax_call() {

    var ajaxCallMock = $.Deferred().resolve('A');

    return ajaxCallMock.done(function(response) {

            return 'B';

    });
}



ajax_call().done(function(response) {
    console.log(response);
});

我希望控制台输出是“B”,但我得到的是“A”。为什么?

【问题讨论】:

  • 因为你只能在一次 AFAIK 中解决一个承诺
  • 我认为一个已解决的承诺总是返回另一个已解决的承诺,这是错的吗?
  • 哦,我错过了done 部分,抱歉
  • jQuery 的.done() 不是.then() 的同义词。在少数情况下您会使用.done()

标签: jquery promise deferred


【解决方案1】:

使用then() 而不是done(),因为done 不会返回新的承诺。

function ajax_call() {

  var ajaxCallMock = $.Deferred().resolve('A');

  return ajaxCallMock.then(function(response) {
    return 'B';
  });
}



ajax_call().then(function(response) {
  console.log(response);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

【讨论】:

  • 我可以简单地将var ajaxCallMock = $.Deferred().resolve('A'); 替换为$.get() Ajax 调用吗?仍然使用then?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-10
相关资源
最近更新 更多