danielchistyakov
@danielchistyakov
Frontend Engineer

Как выполнить данную логику синхронно?

Доброго времени суток! В данный момент пишу бекэнд на Node.JS. У меня есть массив ссылок arr.
Мне необходимо совершать представленные ниже операции применяя каждый элемент этого массива. Написав код ниже я пришёл к выводу, что map выполняется не в той последовательности, которая мне нужна — отсюда ошибки.

В данный момент код исполняется в таком порядке:
Исходная ссылка до условия url[0]
Исходная ссылка до условия url[1]
Начало негативного условия
Исходная ссылка в негативном условии url[0]
Начало негативного условия
Исходная ссылка в негативном условии url[1]
Конец негативного условия
Конец негативного условия

Нужный порядок:
Исходная ссылка до условия url[0]
Проверка условия для url[0]
Исходная ссылка до условия url[1]
Проверка условия для url[1]
Вывод значений, должно получится:
[
  { vat: vat, url: url },
  { vat: vat, url: url }
]


В данном коде использован puppeteer, всё что относится к нему начинается на: "await page".

Собственно код:
const promises = arr.map(async (url, key) => {
    console.log('Исходная ссылка до условия ' + url);
    await page.goto(url);
    await page.waitForSelector('td.sp-properties-form__value');

    if (await page.$eval('td.title-card-page__right-column > table.company-stats > tbody > tr.company-stats__item:nth-child(2) td.company-stats-item__label span.text-mutted', el => el.textContent) === "Головная компания") {
      console.log('Начало позитивного условия');
      const newurl = await page.$eval('td.title-card-page__right-column > table.company-stats > tbody > tr.company-stats__item:nth-child(2) span.white-space-normal > a', el => el.href);
      console.log('Новая ссылка ' + newurl)
      await new Promise(r => setTimeout(r, getRandom()));
      await page.goto(newurl);
      await page.waitForSelector('td.sp-properties-form__value');
      const vat = await page.$eval('td.company-reg-codes span.sp-delimited-list__item:nth-child(2) span.entity-reg-code__value span', el => el.textContent);
      res[key] = { vat: vat, url: newurl };
      console.log('Конец позитивного условия');
    } else {
      console.log('Начало негативного условия');
      console.log('Исходная ссылка в негативном условии ' + url)
      const vat = await page.$eval('td.company-reg-codes span.sp-delimited-list__item:nth-child(2) span.entity-reg-code__value span', el => el.textContent);
      res[key] = { vat: vat, url: url };
      console.log('Конец негативного условия');
    }
    return res[key]
  })
  const result = await Promise.all(promises)
  console.log(result)


Заранее спасибо!
  • Вопрос задан
  • 118 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

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