Есть несколько функций, каждая из которой делает аякс запрос.
Потом надо запустить функцию, которая будет работать с загруженными данными.
Вот только как мне запустить эту функцию тогда, когда данные уже все загрузятся?
Таймер как-то костыльно ставить. Как вариант, в возвращаемом значении аякс запроса функции a1 я запускаю функцию a2 и т.д. много раз. В результате чего тоже запутываюсь- что куда идёт.
Есть ли более нормальный вариант запустить функцию тогда, когда все необходимые данные уже будут загружены? (на Angularjs /jquery ну или либо просто на javascript-е)
Используйте промисы (сервис $http через который вы должны делать все ajax запросы всегда их возвращает) и $q.all что бы дождаться завершения всех операций.
function foo() {
return $http.get('/foo');
}
function bar() {
return $http.get('/bar');
}
$q.all([
foo(),
bar()
]).then(function (results) {
// данные загружены
})
Проблема в том, что аякс это асинхронная технология. То есть сначала практически моментально срабатывает обычный js, а аякс отдаёт обратку уже позже, из за этого вся работа с аякс данными должна происходить внутри колбек функций, по другому вроде никак.
про ангуляр не в курсе, может там есть красивое решение, но судя по принципу работы аякса (асинхронность) - врядли
https://github.com/caolan/async вот это поможет. Смотрим раздел Control Flow и выбираем то, что больше подходит под задание (думаю тут подойдет parallel).