Я делаю организационную диаграмму, показывающую иерархию единиц в виде сетки.Вызов API возвращает объект JSON, содержащий единицу и массив всех его дочерних элементов.Родитель и дети имеют идентификаторы вместе с некоторыми другими ошибочными данными.Чтобы диаграмма была наиболее производительной, я не загружаю больше «строк», чем в окне браузера.Ограничения проектирования, которым я следую, устанавливают, что дочерний элемент, находящийся непосредственно под родительским элементом, должен быть промежуточным дочерним элементом.После загрузки всех модулей, которые могут уместиться в исходном окне браузера, им необходимо получить соответствующий стиль, который помещает их в CSS-сетку.
Допустим, у нас есть место для пять rows Math.floor(window.innerHeight / 150);
API принимает идентификатор объекта в качестве запроса, если вы передадите 0, вы получите модуль верхнего уровня.Чтобы получить первые две строки (parent & children), мы вызываем fetch('…/api/org/0')
.
Затем нам нужно найти дочернего центра и сделать новый вызов на основе его идентификатора
let centre = Math.floor(responseFromPreviousCall.children.length / 2);
fetch(`…/api/org/${responseFromPreviousCall.children[centre].id}`);
Теперь у нас есть 3 строки данных.Этот последний шаг нужно сделать еще два раза, чтобы у нас было 5 строк.Опять же, количество строк, которые соответствуют начальному окну браузера, может измениться.В качестве примера я использую 5.
После того, как все данные получены, мне нужно проверить, какие строки имеют наибольшее количество дочерних элементов, чтобы я мог установить количество столбцов для всеобъемлющей CSS-сетки.И тогда я могу начать делать необходимые манипуляции с DOM и CSS-стилизацией для отображения всех данных в сетке.При этом я чувствую, что было бы неплохо, чтобы данные, созданные вышеуказанными вызовами API, были в одном объекте.
Это не было бы проблемой, если бы код был синхронный ,но fetch основан на обещании , поэтому вводится мир async .Я не хочу блокировать основной поток, поэтому я понимаю, что асинхронность идеальна.Я не могу обернуться, делая последовательные вызовы API, где данные из предыдущего вызова необходимы и доступны для следующего вызова.И если возможно получить один объект, содержащий разные «строки», к которым я могу получить доступ при выполнении DOM-манипуляций / стилей после получения необходимых данных.
Любые предложения / входные данные очень приветствуются!