adelkhalitov
@adelkhalitov
>

Как запустить метод паралельно с работой сервера?

Есть метод, который работает минут 40:
let promises = some.map(el => {
   return new Promise((res ,rej) => {
       ...some action
   })
})

await Promise.all(promises)


Так если в процессе выполнения будут запросы на сервер, он дождется окончания этого 40 минутного метода, и только потом обработает запросы. Как этого избежать?

Есть идеи на сколько это правильно?
Выше описанный код назовем updateDB, у него есть родительский метод, который вызывает его, условно comareData. Будет ли это решением верным?
comareData() {
   return new Promise(async (res, rej) => {
       await someOtherFunctions();
        ...
      updateDB()
          .then(data => res(data))
          .catch(err => rej(data))
   })
}

comareData(); //Далее запуск без тега await
  • Вопрос задан
  • 71 просмотр
Пригласить эксперта
Ответы на вопрос 1
@vshvydky
имхо это не правильно, у тебя должен быть сервер независимым от любых воркеров для работы с бд
имхо работа с бд в целом может вести к блокам самой базы как следствие к отказам в обслуживании. это стоит анализировать отдельно.
предположим твой сервер должен получать команду на старт любого такого действия, ок, тогда сделай это через очередь, через второй сервер который получает команду от первого, да как уугодно, лишь бы свой основной процесс не лочить
и да, твоя функция comareData шедевр непонимания промисов и асинк функций, этот пробел есть резон исправлять.
как минимум сейчас я вижу , что твой промис никогда не разрезольвится, если someOtherFunctions выбросит исключение
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы