Как дождаться разрешения неопределенных рекурсивных обещаний
У меня проблемы с управлением потоком в моем приложении. У меня есть иерархическая (семейная?) структура данных, например:
{name: "Bob", children: [{name: "Tim", children: [..]}, {another child..}]}
Эта структура может иметь многоуровневую структуру.
Теперь то, что я пытаюсь сделать, это рекурсивно перебрать всех людей, получить их идентификатор, сделать вызов API, чтобы получить изображение для этого человека.
Псевдокод:
gatherPicture(hierarchy);
console.log("I want to wait before doing this!") // Logs too early
function gatherPicture(person) {
// api request (promise)
getPicture(person.id).then(r => {
person.picture = r;
person.children.forEach(gatherPicture);
})
}
Надеюсь, этот код имеет смысл. Как мне заставить мой код ждать, пока функция collectPicture не обработает и не разрешит всех людей?
Если это что-то добавит, я использую AngularJS и имею доступ к доступной службе $q promise. Но я просто не понимаю, как настроить эту конкретную цепочку промисов, потому что они встроены в рекурсивную функцию.
Спасибо большое!
$q.all()
21.08.2018