gpt4 book ai didi

javascript - Jquery Deferred 没有达到最后.then

转载 作者:数据小太阳 更新时间:2023-10-29 05:39:16 26 4
gpt4 key购买 nike

我有一系列必须执行的功能。除了最后一个,它们都按顺序执行。 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();
}

最佳答案

很难说出您要用这些 promise 做什么。您首先调用所有 4 个函数,然后尝试使用一堆 then 回调将它们链接起来。如果你想按顺序将它们链接在一起,它应该看起来像这样:

functiond1()
.then(functiond2)
.then(functiond3)
.then(functiond4)
.done(function() { /* blah */ });

如果你只想在所有完成后得到一个结果,你可以使用 $.when

$.when(functiond1(), functiond2(), functiond3(), functiond4())
.then(function(resultd1, resultd2, resultd3, resultd4) { /* blah */ });

另一方面,在您的函数中,您创建的 promise 在另一个不必要的 promise 的 done 回调中解决。 $.getJSON.done() 调用本身会返回一个 promise ,因此不需要额外的 promise 。只需返回从 done() 返回的 promise。

抱歉,我对 jQuery 延迟对象没有太多了解,但它们看起来与标准 Promises 非常相似。

关于javascript - Jquery Deferred 没有达到最后.then,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32924831/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com