@Scorpiored88

Как в цикле по очереди отправлять http запросы?

Всем доброго!
Есть у меня один запрос с разными параметрами. Выполнения запроса происходит на один сервер, сервер доглог обоабатывает такой запрос (синхронизируется со сторонним ресурсом).
Вариан с Promise.all не подходить, так как в таком случае все 300 запросов улетают одновременно и ложат сервак.

Пытался как то через forEach

locationIds.forEach(async (lId) =>{
            const syncResp =  await fetch(`https://server/sync-one-c/26/41/${lId}`).then(resp => resp.json())
            console.log('lId -> ', lId, 'done', syncResp)
        })


Думал так следуещий запрос пойдет только после выполнения предыдущего, но тут тоже все запросы выполняются сразу, А мне нужно чтобы следующий запрос пошол только после того как закончится (получит ответ ) предидуший

Посоветуйте пожалуйста
  • Вопрос задан
  • 273 просмотра
Решения вопроса 1
Aetae
@Aetae Куратор тега JavaScript
Тлен
Array.forEach - синхронный. Он не будет ждать промисов. Либо используй какие-то либы которые умеют асинхронный each и всё остальное, либо используй обычный цикл:
for (const lId of locationIds) {
  const syncResp =  await fetch(`https://server/sync-one-c/26/41/${lId}`).then(resp => resp.json())
  console.log('lId -> ', lId, 'done', syncResp)
})
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
hitrick84
@hitrick84
Фронтовик, всегда на передовой.
locationIds.reduce((result, id) => {
  return result.then(_ => fetch(id));
}, Promise.resolve());
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы