【问题标题】:Jquery Deferred object issue when chaining .then链接.then时的Jquery延迟对象问题
【发布时间】:2012-11-20 16:29:55
【问题描述】:

我返回的链接数据存在问题,然后是第一个延迟数据。第一个例子有效:

api.getData().done(function(data){
  api.getData2().done(
    function(data2){
      $.log('success', data2);
    });
  });

但第二个示例应该工作,第二个 .then() 使用 data2,但由于某种原因,它与 data1 相同。

api.getData().then(function(data1){
  return api.getData2();
}).then(
function(data2){
  $.log('success', data2);
});

有什么建议吗?

【问题讨论】:

  • 你能把api.getData2的代码贴出来吗?如果我没记错的话,api.getData2 必须返回一个 promise 对象才能使其正常工作,并且它还必须在某个时候解析延迟对象。我自己也遇到过这个问题。

标签: jquery ajax jquery-deferred


【解决方案1】:

$.when 将接受两个异步函数,它们返回一个承诺并在两者都完成后执行 .then() 函数:

$.when( api.getData(), api.getData2() ).done(function(data, data2) {
    $.log('success', data2);
});

如果出于某种原因(比如需要数据)您需要在getData2() 之前执行getData(),那么真的不需要.then(),因为您的第一个示例似乎足够有效?

【讨论】:

    【解决方案2】:

    所以经过一些研究JQuery Deferred.Pipe 我发现我不能链接.then,而是需要使用如下管道(.pipe() 是可链接的):

    api.getData().pipe(function(data1){
      return api.getData2();
    }).then(
    function(data2){
      $.log('success', data2);
    });
    

    【讨论】:

    • 另外,您可以使用 .then 完成您的链(相当于 .done 和 .fail)
    猜你喜欢
    • 2019-08-30
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-05
    • 1970-01-01
    相关资源
    最近更新 更多