Каким образом я могу получить данные с сервера и обработав их в цикле отправить другие запросы?
Добрый день, задача заключается в том, что надо получить список id`шников делая запрос по API, а затем иттерируя каждый id отправлять с ним также запрос по API, ответ заносить в массив
idArr представляет собой список из обычных id, перебирая которые можно получить список объектов с этим id
Я понимаю, что цикл у нас синхронный поэтому ответ не успеваю добавлять. Попробовал сделать функцию асинхронной, но результат такой же
|
1 |
function resolveAfterFetch(url) { return new Promise((resolve) => { fetch(url) .then(res => res.json()) .then(result => { resolve(result) }) }); } async function add1() { const idArr = await resolveAfterFetch('https://google.com/newstories.json'); return idArr } add1().then(async v => { for (const value of v) { await resolveAfterFetch(`https://google.com/item/${value}.json?print=pretty`) } }) .then(res => console.log(res)) |
Дополнительно:
Содержание
PHP
1 return new Promise((resolve) => { fetch(url) .then(res => res.json()) .then(result => { resolve(result) }) });
Зачем ты обернул фетч в промис?
накидаю общую идею:
|
1 |
const anyFetch = async () => fetch(url) .then(arr => arr.map( id => fetch(url + id) )); const allData = Promise.All(anyFetch).then(arrOfFinishData => doSomething(arrOfFinishData)); |
Идея следующая:
1. первый фетч возвращает вам промис с массивом айдишников
2. следующий чанк мапит айдишники в новые промисы, которые уже по каждому айдишниику вместо себя возвращают промис с данными.
3. в итоге anyFetch там, где уже надо работать с конечными данными, засовываем в Promise.All, чтобы дождаться всех данных и в чанке делаем с этими данными doSomething
Ответы:
может быть какой-то очередью воспользоваться? пусть отдельный воркер с каждым api запросом разбирается. и потом в какую-то табличку результаты добавляет. и потом уже смотреть что в табличке появилось и работать с этим.
- Да проблема, что я даже не могу использовать await на втором уровне вложенности. Единственное что приходит на ум это использовать два промиса - первый отдает список id, а второй уже внутри их перебирает и делает запросы. Потом через Promise.all уже выводит результат
- pinkhead_psd, я про то, что может как-то иначе на задачу посмотреть, не как в линейном программировании? поменяйте архитектуру. Что будет, если все вызовы api обработать не сразу, а в несколько этапов? думаю, ничего страшного не случится. а в таком случае и цепочка промисов не нужна.
Для решения данной проблемы вы можете воспользоваться услугами фрилансеров. Мы выполним необходимую работу быстро и качественно.
Оставить комментарий Отменить
Ответы
- Есть ответ! к записи Как уменьшить масштаб меньше 100% в Windows 10 (22H2)
- Есть ответ! к записи Аналоги CloudFlare в России?
- Есть ответ! к записи Аналоги CloudFlare в России?
- Есть ответ! к записи Как называется человек, который дизайн придумает для сайта и сверстает его?
- Есть ответ! к записи Можно ли установить Яндекс.Диск на АльтЛинукс?
- Есть ответ! к записи Картинки мутные только на сафари, есть выход?
- Есть ответ! к записи Keenetic. Как настроить SSTP клиент с сертификатом?
- Есть ответ! к записи Чем заменить executor в aiogram 3?
Для получения данных с сервера и последующей обработки их в цикле для отправки других запросов, вам нужно воспользоваться асинхронными запросами. В зависимости от языка программирования, который вы используете, существуют различные способы реализации этой задачи. Ниже приведен пример решения на языке программирования PHP с использованием cURL:
В данном примере мы отправляем запрос на сервер, получаем данные в формате JSON, преобразуем их в массив и перебираем в цикле. Для каждого элемента массива мы формируем данные для нового запроса на другой сервер и отправляем его с использованием cURL. После обработки ответа на запрос, вы можете добавить свою логику обработки данных.
Убедитесь, что у вас включены расширения PHP cURL для работы с сетью. В случае использования другого языка программирования, необходимо выбрать соответствующий инструмент для работы с HTTP запросами.
Для того чтобы получить данные с сервера и обработать их в цикле для отправки других запросов, вам необходимо использовать асинхронные запросы. В случае использования языка программирования PHP, вы можете использовать библиотеку cURL для выполнения HTTP запросов.
Примерно код на PHP для выполнения запроса на сервер и обработки данных в цикле может выглядеть следующим образом:
В данном примере мы используем cURL для выполнения запроса на сервер, получения данных и обработки их в цикле. Затем мы отправляем другие запросы на другой сервер с обработанными данными.
Убедитесь, что в вашем PHP скрипте включена поддержка cURL, и что вы обрабатываете ошибки запросов и ответов сервера для обеспечения надежности вашего кода.