Запуск функции, когда все данные загрузятся?

Есть несколько функций, каждая из которой делает аякс запрос.
Потом надо запустить функцию, которая будет работать с загруженными данными.
Вот только как мне запустить эту функцию тогда, когда данные уже все загрузятся?
Таймер как-то костыльно ставить. Как вариант, в возвращаемом значении аякс запроса функции a1 я запускаю функцию a2 и т.д. много раз. В результате чего тоже запутываюсь- что куда идёт.
Есть ли более нормальный вариант запустить функцию тогда, когда все необходимые данные уже будут загружены? (на Angularjs /jquery ну или либо просто на javascript-е)
  • Вопрос задан
  • 292 просмотра
Решения вопроса 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Используйте промисы (сервис $http через который вы должны делать все ajax запросы всегда их возвращает) и $q.all что бы дождаться завершения всех операций.

function foo() {
    return $http.get('/foo');
}

function bar() {
    return $http.get('/bar');
}

$q.all([
  foo(),
  bar()
]).then(function (results) {
   // данные загружены
})
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 4
Проблема в том, что аякс это асинхронная технология. То есть сначала практически моментально срабатывает обычный js, а аякс отдаёт обратку уже позже, из за этого вся работа с аякс данными должна происходить внутри колбек функций, по другому вроде никак.

про ангуляр не в курсе, может там есть красивое решение, но судя по принципу работы аякса (асинхронность) - врядли
Ответ написан
Комментировать
Denormalization
@Denormalization
https://github.com/caolan/async вот это поможет. Смотрим раздел Control Flow и выбираем то, что больше подходит под задание (думаю тут подойдет parallel).
Ответ написан
Комментировать
@liff
PHP >= 5.4, 7 + PostgreSQL + JS + EmberJs +++
используйте deferred - это то что вам необходимо

1) api.jquery.com/category/deferred-object
2) habrahabr.ru/post/113073
Ответ написан
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы