【发布时间】:2015-12-31 16:57:26
【问题描述】:
我有一系列必须执行的函数。除了最后一个之外,它们都按顺序执行。 d1 执行,d2 执行,d3 执行,然后 done 函数中的代码在 d4 解析之前执行。想不通为什么。任何帮助将不胜感激。
$(document).ready(function() {
var d1 = functiond1();
var d2 = functiond2();
var d3 = functiond3();
var d4 = functiond4();
d1.then(d2).then(d3).then(d4).done(function() {
//Code here does not wait for d4 to end before executing
//HELP!
});
});
function functiond1() {
var dfd = $.Deferred();
//Do stuff here
//Works in sequence
dfd.resolve();
return dfd.promise();
}
function functiond2() {
var dfd = $.Deferred();
params = jQuery.param({
'parm1': 1,
'parm2': 2,
'parm3': 3
});
jQuery.getJSON($.webMethoJSONGet1, params).done(function(data) {
//Do stuff here
//Works in sequence
dfd.resolve();
});
return dfd.promise();
}
function functiond3() {
var dfd = $.Deferred();
//Do stuff here
//Works in sequence
dfd.resolve();
return dfd.promise();
}
function functiond4() {
var dfd = $.Deferred();
params = jQuery.param({
'parm1': 1,
'parm2': 2,
'parm3': 3
});
jQuery.getJSON($.webMethoJSONGet2, params).done(function(data) {
//Do stuff here
//does not work in sequence
dfd.resolve();
});
return dfd.promise();
}
【问题讨论】:
-
寻求帮助时,请以可读的方式缩进您的代码。我已经通过 jsbeautifier 为你运行了代码。
-
很棒的提示。按要求完成。关于代码的任何提示?
-
为什么到目前为止所有代码都缩进了?我已经为你修好了,现在更多的东西偏向右边而不是必要的。我已经重新修好了。
-
延迟链进入 $(document).ready()。这是最后一次修复'。
-
不,你没有。您的
getJson.done()返回一个承诺,应该是您的函数返回的内容。在其中嵌套另一个 Promise 完全违背了使用 Promise 的目的。
标签: javascript jquery promise deferred