Прежде чем я начну, я хочу упомянуть, что у меня нет большого опыта работы с обещаниями/отложенными объектами в JavaScript.
То, что я пытаюсь достичь, - это когда пользователь нажимает кнопку, он выполняет несколько запросов $.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();
});
});
Однако оба оповещения отправляются сразу после того, как друг с другом, и не дожидаясь просьбы, чтобы закончить. Я пробовал другие способы сделать это, и я не могу понять, что это правильно.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all – Hackerman
Ну, дерьмо. Спасибо, похоже, сделали трюк. Благодаря! – ThePerplexedOne
Действительно хорошая ссылка @Хакерман, я не знал об этом – George