gpt4 book ai didi

javascript - $.when().done() 不工作

转载 作者:行者123 更新时间:2023-11-30 16:01:34 25 4
gpt4 key购买 nike

我在使用 jQuery 时遇到 $.when().done() 函数的一些问题。有人可以帮忙吗?当我有 ajax 调用和非 ajax 调用方法时,即使我使用 $.when().done() 也会调用非 ajax 调用。请参阅下面的代码段。方法/功能三之前运行。

$(document).ready(function () {
Initial();
});

function Initial() {
debugger;
var emp = { Name: "Ram", Age: 10 };
Main(emp);
}

function Main(em) {
$.when(One(em)).done(Two(em)).done(Three(em.Name));
}

function One(et) {
//some ajax call
console.log("One");
}

function Two(et) {
//some ajax call
console.log("Two");
}

function Three(et) {
console.log(et);//not an ajax call
console.log("Three");
}

编辑:

下面是Vohuman修改后的代码片段,效果非常好

$(document).ready(function () {
Initial();
});

function Initial() {
debugger;
var emp = { Name: "Ram", Age: 10 };
Main(emp);
}

function Main(em) {
var def1 = $.Deferred();
var def2 = $.Deferred();
One(em, def1);
Two(em, def2);
$.when(def1, def2).done(function () {
Three(em.Name)
});
}

function One(et, defObj) {
//some ajax call
if (defObj) {
defObj.resolve();
}
console.log("One");
}

function Two(et, defObj) {
//some ajax call
if (defObj) {
defObj.resolve();
}
console.log("Two");
}

function Three(et) {
console.log(et);//not an ajax call
console.log("Three");
}

最佳答案

() 称为调用运算符。它调用一个函数。这意味着您正在调用自己的函数,并且函数的返回值被设置为回调而不是函数本身。

$.when(One(em)).done(Two).done(Three);

如果你想用参数调用回调,你应该使用中间件,即另一个函数。

function Main(em) {
$.when(One(em)).done(function() {
Two(em);
}).done(function() {
Three(em.Name);
});
}

另请注意,如果您想发送多个 ajax 请求并在所有请求完成时执行回调,您可以将多个延迟对象传递给 $.when:

$.when(deferredOne, deferredTwo).then(function(resolvedValueOne, resolvedValueTwo) {

});

作为建议,不要对常规函数使用 PascalCase 名称。按照惯例,在 JavaScript 中,PascalCase 名称用于命名构造函数和类。

关于javascript - $.when().done() 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37650297/

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