Зацикливание асинхронных функций в nodejs

так вот моя проблема. В следующей функции я хочу получить некоторые данные с веб-сайта с помощью puppeteerjs. Функция ищет продукт на сайте по именам, полученным из базы данных mongodb. Вот мой вопрос. Я хочу пропустить функцию через массив имен, которые я получаю от mongo. Поэтому, если функция выполняется один раз, она запускается снова со следующим именем в массиве, пока в массиве не останется ничего.

async function scrape() {
    const browser = await puppeteer.launch({
        headless: false
    });
    const page = await browser.newPage();
    await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36');
    await page.goto(dealer);
    await page.type('.Search-bar-text-input', arrayOfArticles[i]);
    await page.click('.Embedded-search-button')
    await page.waitFor('.BuyingOptions-total-price');

    const result = await page.evaluate(() => {
        let path = '.BuyingOptions-total-price';
        let price = document.querySelector(path).innerText;

        return price;
    });

}

Итак, я изначально хотел просто сделать это с помощью этого:

for (var i = 0, len = arrayOfArticles.length; i < len; i++){

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

that doesnt work with async functions Конечно, просто await при каждом вызове scrape
CertainPerformance 10.08.2018 09:01

Я уже пробовал это, но это все еще не сработало, как именно вы это закодируете?

Alex Jones 10.08.2018 09:05
(async () => { for (let i = 0; i < arrayOfArticles.length; i++) await scrape(); })();
CertainPerformance 10.08.2018 09:06
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
3
92
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

вы можете пойти с небольшой модификацией

return page.evaluate(() => {
    let path = '.BuyingOptions-total-price';
    let price = document.querySelector(path).innerText;

    return price;
});

//----------------

(async () => {
    for (var i = 0, len = arrayOfArticles.length; i < len; i++){
        const result = await scrape(arrayOfArticles[i]);
    }
})()

Итак, я обнаружил проблему, что-то не так с базой данных, предоставленный вами код работал как шарм, большое спасибо

Alex Jones 10.08.2018 10:08

Другие вопросы по теме