gpt4 book ai didi

javascript - 等待多个 $.getJSON 完成

转载 作者:行者123 更新时间:2023-11-28 18:17:19 25 4
gpt4 key购买 nike

在开始之前,我想提一下,我对 JavaScript 中的 Promise/Deferred 对象没有太多经验。

我想要实现的目标是,当用户单击按钮时,它会运行多个 $.getJSON 请求,处理响应并相应地更新页面。

当所有这些请求完成时,我还需要通知用户,这是我处理我谈到的第一部分的 connect 方法:

function connect(row) {
return new Promise(function(resolve, reject) {
var trees = $("#selectedTree").val();
var employee_id = row.attr("rel");

var columns = row.children();
var emailColumn = $(columns[1]);
var firstNameColumn = $(columns[2]);
var lastNameColumn = $(columns[3]);
var jobTitleColumn = $(columns[4]);
var statusColumn = $(columns[5]);
var actionsColumn = $(columns[6]);

actionsColumn.html("<span class='spinner'><i class='fa fa-spinner fa-spin'></i></span>");
$.getJSON("functions/connect_with.php", {
employee_id: employee_id,
trees: trees
}, function(response) {
emailColumn.html(response.message.person.email);
actionsColumn.html("<i class='text-success fa fa-check'></i>");
if(response.success) {
firstNameColumn.html(response.message.person.name.givenName);
lastNameColumn.html(response.message.person.name.familyName);
jobTitleColumn.html(response.message.person.employment.title);
}
statusColumn.html("<i class='text-success fa fa-sitemap'></i>");
resolve(true);
});
});
}

这就是用户单击该按钮时发生的情况:

    $("#connectAll").click(function() {
alert("OFF WE GO");
$(this).hide();
var methods = [];
$(".staffMember input:checked").each(function(index, checkbox) {
checkbox = $(checkbox);
var row = checkbox.parents("tr");
methods.push(connect(row));
});
$.when.apply($, methods).then(function () {
alert("WE DID IT MOM");
$("#connectAll").show();
});
});

但是,两个警报都会立即相继发送,并且不会等待请求完成。我已经尝试过其他方法来做到这一点,但我似乎无法做到正确。

最佳答案

不要调用apply,而是使用Promise.all

这会执行一系列 promise ,并在所有 promise 完成后返回。

所以你的代码将变成:

$("#connectAll").click(function() {
alert("OFF WE GO");
$(this).hide();
var methods = [];
$(".staffMember input:checked").each(function(index, checkbox) {
checkbox = $(checkbox);
var row = checkbox.parents("tr");
methods.push(connect(row));
});
Promise.all(methods).then(values => {
alert("WE DID IT MOM");
$("#connectAll").show();
}).catch(reason => {
alert("MOM, SOMETHING WENT WRONG");
});
});

关于javascript - 等待多个 $.getJSON 完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40592696/

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