у меня есть ряд API конечных точек, которые мне нужно опрашивать в серии, чтобы создать канонический список:как управлять серией вызовов API в node.js
/cities
/homes
/parcelvalue
так, что опрос /cities
дает мне список городов, опрос /homes
дает мне список всех адресов в данном городе, а опрос /parcelvalue
дает мне значение данного дома.
В конце концов, я собираюсь создать файл дерева, сохраняющего инкрементный вывод опроса каждой конечной точки в каталог для целей аудита:
|
\-cities/cities.json
|
\-homes/homes.json
|
\-parcelvalue/parcelvalue.json
так что cities.json
является сырым выход /cities
enpoint, homes.json
содержит результаты опроса конечной точки /homes
для каждого города в cities.json
, а parcelvalue.json
содержит результаты опроса конечной точки /parcelvalue
для каждого дома в homes.json
. Я хочу, чтобы каждый шаг полагался на дисковый ввод-вывод, так что функция, которая строит homes.json
, начинается с файла cities.json
.
Самый простой способ, которым я могу это сделать, - сделать каждый шаг 1. синхронно загрузить файл, который мог бы его проинформировать, 2. синхронно опросить соответствующую конечную точку, а затем 3. синхронно сохранять файл, который каждый функция может генерировать:
getCities()
функция может проверить, если cities.json
существует, и производить файл из конечной точки, если это не так, getHomes()
функция может импортировать cities.json
, а затем опрашивать /homes
конечную точку для каждого города в списке и затем сгенерируйте homes.json
, а функция getParcelValues()
может импортировать homes.json
, а затем опросить конечную точку /parcelvalue
r каждый дом в своем списке, а затем сгенерируйте parcelvalue.json
(это упрощение, я хотел бы добавить фильтрацию по функциям и обработку ошибок и т. д., но я стараюсь, чтобы этот пример был сфокусирован.)
К сожалению, тщательное изучение синхронных библиотек запросов HTTP в этот вечер не привело к тому, что будет работать в моих обстоятельствах.
Есть ли хороший способ использовать что-то вроде async.series или другую подобную библиотеку рабочего процесса async, чтобы использовать, т. Е. Библиотеку async request? Я хотел бы, чтобы каждая из этих функций вызывалась в серии, getCities()
->getHomes()
->getParcelValues()
, и должна быть инкапсулирована настолько, насколько это возможно.