Я застрял на чем-то, что, по-моему, должен быть прямолинейным. Мне нужно взять данные из трех различных вызовов ajax, объединить и обработать все три и отобразить результирующий массив для пользователя.
В своей простейшей форме мой код выглядит следующим образом:
function giftControler ($scope, $http) {
var names = $http.get("names.json"),
naughty = $http.get("naughty.json"),
nice = $http.get("nice.json");
Я понимаю, что мои переменные присваиваются promises, а не фактическим результатам, и что http-запрос передан в очередь событий. Если я буду следовать им с исполняемыми операторами, эти переменные будут undefined. Я не понимаю, как дождаться, когда эти promises будут разрешены, чтобы продолжить их обработку.
То, что я хотел бы сделать, это сразу добавить код:
for (var i=0; i<names.length; i++){
for (var j=0; j<nice.length; j++){
if (names[i] === nice[j]){
names[i] = names[i] + "--Yay!!";
};
};
};
$scope.kids = names;
Проблема в том, что я не могу просто работать с promises, как если бы они были решены массивами. Javascript увидит их для операторов сразу после http-звонков и попытается выполнить их немедленно, даже если promises не был разрешен.
Где я застрял в том, что $http api дает мне объект обещания с тремя функциями: error
, success
и then
. Я не уверен, что делать с этим в этом случае. Мне нужна единственная функция успеха для всех трех. Мне нужно, чтобы все три разрешались, затем обрабатывали данные в каждом, а затем присваивали результат модели angular.
Я уверен, что мне не хватает чего-то очевидного, но есть ли у кого-нибудь предложение? В моей реальной работе у меня есть несколько ajax-вызовов нескольких источников данных и много обработки (сравнение значений, сортировка, конкатенация и т.д.), Чтобы создать один хороший сбор данных, но я не могу передать эту проблему.
Спасибо,