У меня есть вопрос в отношении асинхронных вызовов данных в AngularJS.Использование данных одного вызова асинхронного API другому
Проблема в том, что я получаю несколько объектов в массиве из одного вызова API, и мне придется расширять эти объекты данными из другого вызова API.
Я думал о наличии вложенных асинхронных вызовов, но моя логика немного отстает от того, как это будет работать с сервисом $ q. У меня есть служба, которая вернет объект, который был расширен вторым вызовом, поэтому я могу использовать его в контроллере для отображения в представлении.
Первый вызов API возвращает некоторые параметры, которые мне нужны для второго вызова API, чтобы получить соответствующие данные, для которых я вернусь обратно к контроллеру.
Мне нужно зациклиться на первом вызове, чтобы затем запустить второй вызов API внутри этого, но как я верну его обратно на контроллер? Я не могу решить, когда был запущен первый цикл, потому что он сам объясняет.
Каково решение для чего-то подобного?
Редактировать мой вопрос в псевдо-JavaScript:
returnListOfStuff().then(function (data) {
var result = data.Result;
for (var i = 0; i < result.length; i++) {
var dataForListItem = null;
returnDataForListItem(result[i].ID).then(function (data) {
dataForListItem = data;
});
for (prop in dataForListItem[0]) {
result[i].prop = dataForListItem[0][prop];
}
}
return result;
});
Как видно, это не будет работать, учитывая, что только получать результаты от первого звонка returnListOfStuff()
, потому что то, что происходит внутри для цикл еще не разрешен. Я не могу понять, как сделать это с $q.all()
, потому что у меня нет параметров из returnListOfStuff
функции еще
Без кода его трудно судить, что ваша проблема, но это звучит как дубликат [$ Q обещание с петлей] (http://stackoverflow.com/q/25671760/1048572) – Bergi
@Bergi добавлен некоторый псевдокод, чтобы описать проблему ближе ... – NicT