【发布时间】: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 在所有调用完成之前触发..
任何想法为什么这不起作用?
【问题讨论】:
-
无法复制 -> jsfiddle.net/adeneo/dd4wq0b6
-
嗯,很有趣。我实际上并没有使用
$.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