как запустить foreach синхронно в nodejs - PullRequest
0 голосов
/ 10 мая 2018

Я выполняю задание отправки оповещений по электронной почте в nodejs, из-за асинхронных обращений слишком много. Исключение - даже тайм-аут поиска.

Вместе с узлом я использую обещание Q.

Скажите, пожалуйста, как исправить эту проблему.

1 Ответ

0 голосов
/ 10 мая 2018

Если вы можете использовать новый Node, Google, как использовать async / await, то вы можете за цикл все запросы и ждать их.

Если вы не можете, вы можете сделать это рекурсивно:

function processAllOneByOne(fns, i){
  if (i >= fns.length)  { return Promise.resolve({done:true}) }
  fns[i]().then(() => processAll(fns, i+1));
}

И назовите это с

processAllOneByOne(fns, 0)

Обратите внимание, что, как только вы создадите, пообещайте CANT обработать, как это выполняется "внутри". Таким образом, вам нужно иметь fns, который является массивом функции, вызывающей эту функцию, создающей и возвращающей Promise, которого вы хотите дождаться, чтобы завершить.

Итак, нажмите что-нибудь вроде fns.push(() => sendAlert(some, paramaters)), где sendAlert создает необходимое обещание.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...