График действий кукловода в указанное время - PullRequest
0 голосов
/ 02 марта 2019

Мне трудно понять, как планировать асинхронные функции кукловода, представьте себе следующее:

await page.type("field", "somedata");
// calculate specific timestamp
setTimeout(() => { await page.click("#submit") }, delay);

Мне нужно подготовить несколько форм в "paralell", так как я не могу остановиться до тех пор, покапроходит отметка времени, цель состоит в том, чтобы подготовить эти формы и затем отправить их в определенную отметку времени.Требуется, чтобы две формы, которые рассчитывают аналогичную временную метку, отправлялись в течение 10 мс за другой.

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

Ответы [ 2 ]

0 голосов
/ 03 марта 2019

Вы также можете использовать собственный обещанный таймер кукловода, не дожидаясь задержки, и нажмите:

await page.type("field", "somedata");
page.waitFor(delay).then(() => { page.click("#submit"); });
0 голосов
/ 02 марта 2019

Ваш код должен работать, если вы пометите свою функцию как асинхронную, как это:

setTimeout(async () => { await page.click("#submit") }, delay);

Но у вашего кода есть проблема в том, что setTimeout не является Promise, поэтому действие, подобное await page.close() (котороеЯ предполагаю, что придет дальше) будет срабатывать до истечения времени ожидания.

Было бы лучше сделать это так:

await page.type("field", "somedata");
await new Promise(resolve => setTimeout(resolve, delay)); // waits delay milliseconds until the promise is resolved
await page.click("#submit");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...