【问题标题】:jquery - Run a callback when an array of promises is successfuljquery - 当一组承诺成功时运行回调
【发布时间】:2015-04-30 08:46:50
【问题描述】:

我有一个承诺数组,我正在尝试添加一个回调,当所有这些都成功时将执行该回调。这是 jQuery $.when() 的主要用例,但不知何故它不起作用。

我为几个不同的 ajax 查询运行了这段代码:

// Global variable that holds the promises
var dygraph_promises = []

var plot_promise = $.ajax()
plot_promise.done(function(a) {
      console.log("DONE!");
      // do stuff with data
});

// Keep track of promises
dygraph_promises.push(plot_promise);

然后我想在一切完成后运行以下代码

// Synchronize dygraphs together
console.log(dygraph_promises);
console.log(dygraph_promises.length);
$.when.apply($, dygraph_promises)
   .then(function() {
       console.log("when called!");
   });

当我在控制台中运行此代码时,我看到字符串 "when called" 打印在字符串 "DONE" 之前。所以when 在所有调用完成之前触发..

任何想法为什么这不起作用?

【问题讨论】:

  • 嗯,很有趣。我实际上并没有使用$.ajax(),而是使用了一个围绕它的库(influxdb-js)。但是,返回的对象与$.ajax() 返回的对象的字段不同。我会相应地更新问题
  • 呃,你不能在不是 jQuery 的东西上使用 $.when 吗?
  • 当我查看该调用返回的对象时,我看到了这些字段:n { then=function(), done=function(), nodeify=function()}。我认为这是一个标准的承诺/延迟,因此我可以使用 jQuery。但内容与$.ajax() 返回的字段不匹配。知道这是什么吗?
  • 所有的promise都是“thenable”的,所以它们返回的属性有些相同,但目前我认为jQuery的$.when只支持jQuery的promise,顺便说一下不遵循A+标准。

标签: javascript jquery ajax promise


【解决方案1】:

感谢@adeneo 的帮助,我发现我没有使用标准的 jQuery 承诺。结果,我开始使用q.js 库,并使用all 调用there

Q.all(dygraph_promises)
   .then(function(a) {
     ...
   )};

【讨论】:

  • 如果可以,请接受您的回答,以免其他用户提出该问题并试图帮助您;)
猜你喜欢
  • 1970-01-01
  • 2022-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多