У меня есть серия вложенных асинхронных вызовов, которые нужно завершить до моего кода. Функция save_part1 вызывает базу данных sqlite и возвращает интересующие строки. Для каждой из этих строк я делаю вызов ajax для сохранения их удаленно.Подождите, пока завершатся вложенные асинхронные вызовы
Из того, что я прочитал о обещаниях и отложенных, я видел, что они используются только в контексте вызовов ajax. И вдобавок ко всему, это заставляет мой мозг болеть.
Вопрос: как подождать, пока все вызовы ajax не будут завершены до запуска save_part2?
function save()
{
save_part1();
//this should only happen after all the ajax calls from save_part1 are complete
save_part2();
}
function save_part1()
{
db.transaction(function (tx) {
tx.executeSql("SELECT * FROM TABLE1", [],
function (transaction, results) {
for (var i = 0; i < results.rows.length; i++)
{
var row = results.rows.item(i);
ajaxCall_item1(row);
}
}, errorHandler)
});
}
function save_part2()
{
db.transaction(function (tx) {
tx.executeSql("SELECT * FROM TABLE2", [],
function (transaction, results) {
for (var i = 0; i < results.rows.length; i++)
{
var row = results.rows.item(i);
ajaxCall_item2(row);
}
}, errorHandler)
});
}
Как выглядит ajaxCall_item? –
Возможный дубликат [Как подождать, пока завершатся вложенные запросы async jQuery AJAX?] (Http://stackoverflow.com/questions/8097516/how-to-wait-until-nested-async-jquery-ajax-requests-have -finished) – Ageonix
Вы ищете что-то, как описано на http://api.jquery.com/ajaxcomplete/. Вы можете сделать еще один вызов ajax, используя ajaxComplete. – user3509208