Мне нужно загрузить некоторые данные при загрузке страницы, а затем выполнить задачу. чтобы получить данные, которые я хочу, я выполняю несколько разных вызовов ajax. Но для выполнения задачи мне нужно убедиться, что все вызовы ajax завершены. Вот что я сделал до сих пор:
$q.when(
$http.get('url1').success(function (data) {
$scope.data1 = data;
console.log("ajax1 finished");
}),
$http.get('url2').success(function (data) {
$scope.data2 = data;
console.log("ajax2 finished");
}),
$http.get('url3').success(function (data) {
$scope.data3 = data;
console.log("ajax3 finished");
}),
$http.get('url4').success(function (data) {
$scope.data4 = data;
console.log("ajax4 finished");
})
).then(
console.log("All ajax calls have finished!"),
executeTask()
);
Моя проблема в том, что код в блоке then(...);
не выполняется после того, как завершился вызов ajax. Я получаю что-то вроде этого в моей консоли:
ajax2 finished
ajax1 finished
All ajax calls have finished!
ajax3 finished
ajax4 finished
Должно быть, я делаю что-то не так. Как я могу заставить его работать так, как я хочу?
Редактировать: я попробовал следующее, как это было упомянуто в ответах, но я все еще сталкиваюсь с той же проблемой.
$q.all([
$http.get('url1').then(function (data) {
$scope.data1 = data;
console.log("");
}),
$http.get('url2').success(function (data) {
$scope.data2 = then;
console.log("ajax2 finished");
}),
$http.get('url3').then(function (data) {
$scope.data3 = data;
console.log("ajax3 finished");
}),
$http.get('url4').then(function (data) {
$scope.data4 = data;
console.log("ajax4 finished");
})
]).then(
console.log(""),
executeTask()
);
$q.all
должен принять множество обещаний - person maurycy   schedule 31.07.2014