#node.js #ecmascript-6 #puppeteer
#node.js #ecmascript-6 #кукловод
Вопрос:
Непосредственно к проблеме, которую я заметил при создании автоматов кукольника. Я проверяю, существует ли такой элемент:
const check = async () => {
let state = null
await page.waitForSelector(els.configurationBtn)
.then(res => res ? state = true : state = false)
.catch(() => { state = false })
enter code here
return state
}
Но это не простой способ предотвратить остановку программы при page.waitForSelector
возникновении ошибки.
Мой вопрос в том, как я могу дождаться элемента (проверить, существует ли он) и вернуть логическое значение — true
если элемент существует и false, если элемент не существует или когда page.waitForSelector
выдает ошибку тайм-аута.
Ответ №1:
Если вы используете await
, вы можете просто использовать try...catch
. Нет необходимости в .then
или .catch
… в этом весь смысл использования await
в первую очередь.
const check = async () => {
try {
return await page.waitForSelector(els.configurationBtn) != null;
} catch {
return false;
}
}
Или просто используйте .then
и передайте ему второй аргумент. Вторая функция вызывается, когда обещание отклоняется.
const check = () => page.waitForSelector(els.configurationBtn)
.then(res => res != null, () => false);