Всем привет!
Помогите, пожалуйста, разобраться с использованием readline в node.js.
Суть в том, что я делаю парсинг страницы. По какой-то причине не на всех из них удается найти элемент по селектору (это отдельный вопрос, но сейчас про другое). В случае, если элемент, отвечающий за кол-во страниц, не найден, я хочу ввести его через командную строку вручную. Написал код, но скрипт не дожидается ввода параметра, а продолжает выполняться и закономерно отваливается без кол-ва страниц.
Вот код:
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
const lastPageLink = await this.driver.findElement(By.css('.pager-last a'))
let count_pages = +lastPageLink.getText()
if (count_pages !== count_pages) {
rl.question('Не нашли количество страниц. Установите вручную ', (value) => {
count_pages = value
rl.close()
})
}
console.log('Total page count: ' + count_pages)
// Цикл по страницам
for (let page = this.last_page ? this.last_page : 1; page < count_pages; page++) {
//update last page
await this.updateEntity('sites', {last_page: page}, {name: this.SITE}).last_page
await this.driver.get(`${this.currentCategory.url}?page=${page}`)
console.log('New page parse: ' + page)
await this.parsePage()
}
// Парсинг завершен, отмечаем в базе
await this.updateEntity('categories', {parsing: false}, {url: this.currentCategory.url})
Проблема в том, что я не могу просто взять и запихнуть все в rl.question. Во-первых, он будет ругаться, что я использую асинхронный код вне async функции. Во-вторых, получается что я должен задвоить код: указать его для rl.question и указать его для ситуации, когда кол-во страниц удалось получить в штатном режиме.
Как мне сделать так, чтобы скрипт сначала долждался моего ввода и только потом начал выполнять "Цикл по страницам"?