【发布时间】:2014-09-13 06:19:44
【问题描述】:
我认为/希望我遗漏了有关 Promise 编程范式的一些内容。我在 jQuery 上运行以下代码,因为我想从 URL_1 和 then 获取 data (成功时)以获取 data2 来自 URL_2。其他变量来自这段代码的上下文。
但是,我得到的是 URL_1 两次的数据!!
.ajax({
url: URL_1,
type: "GET",
async: false,
cache: false
}).then(function (data) {
myObj = process(otherObj, data, URL_1);
return $.ajax({
url: URL_2,
type: "GET",
async: false,
cache: false
});
}).done(function (data2) {
myObj2 = process_more(data2, URL_2, someObj);
myCounter--;
if (myCounter== 0) {
console.log("%%%% COMPLETE %%%%");
}
});
提前感谢您的宝贵时间!!
平移
【问题讨论】:
-
不要使用
async: false。它甚至可能导致 promise 出现问题。 -
@Radek - 这就是我的想法,我很确定你不能向
.then内部的链返回新的承诺,但测试表明你实际上可以 -> jsfiddle.net/4mm4E -
那么可能只需删除
async: false部分,它应该可以工作。 -
你可能是对的,但
async: false仍然可以工作。我检查了 jQuery 版本,它在 1.8 之前,这意味着 promise/deferred 模型在原始 promise 模型中被“破坏”了。我用最新版本替换了 jquery,现在它工作正常。 -
标签: javascript jquery ajax promise jquery-1.7