Итак, я что-то отбрасываю, и мне нужно открыть браузер, чтобы получить один конкретный бит информации (остальная информация не нуждается в браузере, чтобы открываться). Так что теперь мне нужно подождать, пока откроется браузер, дать информацию и закрыть, прежде чем делать что-либо еще.
Я использую обещания и жду этого, но моя текущая реализация не ждет браузера и переходит к следующей итерации. Код выглядит как
//loops over every product
for (let j = 0; j < holder.length; j++) {
await this.getDetails(this.productLink);
}
getDetails(url) {
return new Promise(resolve => {
request(url, async (error, response, html) => {
if (!error && response.statusCode == 200) {
const $ = cheerio.load(html);
//gets some details
//wait for browser
await this.getSize(url).then(response => {
console.log(response)
})
resolve("done")
}
});
});
}
getSize(url) {
return new Promise(async resolve => {
const browser = await puppeteer.launch({
headless: false,
args: ['--no-sandbox']
});
const page = await browser.newPage();
await page.setViewport({
width: 1200,
height: 1080
});
await page.goto(url, {
"waitUntil": "networkidle0"
})
let cl = await page.$(".input-box select");
await cl.click();
cl = await page.$(".input-box select");
let html = await page.evaluate(e => e.innerHTML, cl)
await browser.close();
resolve(html);
})
}
Ожидание this.getSize не ожидает завершения метода getSize. Что я делаю неправильно? Или что тут можно сделать?