page.$eval
и page.$$eval
оба метода возвращают значение, если сам pageFunction
возвращает обещание (я полагаю, что это очень редкий случай с кукловодом, если они этого не сделают, большинство методов кукловода возвращают обещания).
page. $$ eval (селектор, pageFunction [, ... args])
Все задокументированные варианты использования возвращают значение:
const divCount = await page.$$eval('div', divs => divs.length);
const options = await page.$$eval('div > span.options', options => options.map(option => option.textContent));
Вопрос
Но можем ли мы использовать page.$eval
/ page.$$eval
для выполнения методов, которые взаимодействуют только с браузером без возврата полезного значения (например, page.click
или page.type
), особенно если по очень похожей причине мы считаем это плохой практикой использования Array.map
, когда мы не используем возвращенный массив? Мне любопытно, потому что таким образом мы могли бы упростить сценарии, в которых использование Array.forEach
проблематично.
Он работает, но стоит ли его использовать?
const clickAll = await page.$$eval('button', links => links.forEach(link => link.click()));
Примечание. Для меня создание const
не имеет смысла, поскольку мы не можем использовать ссылку clickAll
где-либо еще. Я бы предпочел использовать это само по себе, не объявляя об этом.
1 ответ
Вы можете рассматривать это как обычный javascript function
, он может возвращать значение или нет, и вы можете использовать эту функцию возврата или нет. Вам не нужна эта переменная clickAll
.
await page.$$eval('button', links => links.forEach(link => link.click()));
Похожие вопросы
Связанные вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript/JS) и его различных диалектах/реализациях (кроме ActionScript). Имейте в виду, что JavaScript — это НЕ то же самое, что Java! Включите все ярлыки, относящиеся к вашему вопросу; например, [node.js], [jQuery], [JSON], [ReactJS], [angular], [ember.js], [vue.js], [typescript], [svelte] и т. д.