#javascript #asynchronous #async-await #cron
#javascript #асинхронный #асинхронный-ожидание #cron
Вопрос:
Мне нужно запустить асинхронную функцию, написанную с помощью Puppeteer (это бот), и я хочу запускать эту функцию каждые 60 секунд. Проблема в том, что асинхронная функция (бот) выполняется в течение 2 минут, и поэтому узел cron автоматически выполняет другую асинхронную функцию, которая приводит к появлению 2 ботов, а через 5 секунд он запустит другой экземпляр этой функции.
Я хочу запустить 1-й раз, затем подождать 60 секунд и после этого выполнить его снова. Я так запутался, это мой первый проект NodeJS.
const cron = require("node-cron")
cron.schedule("*/60 * * * * *", async () => {
try {
console.log(BotVote("Royjon94", "1"))
}
catch {
console.log('error 404')
}
})
Комментарии:
1. Ну, я не знаю о cron в node, но вы не ожидаете
BotVote
функции. Если эта функция выполняет асинхронную операцию, вы должны ожидать этого.
Ответ №1:
Я не уверен, cron
подходит для такого рода работы. Но в принципе вы можете добиться такого же поведения с помощью базового цикла while и обещания ожидания.
function delay(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function BotVote() {
await new Promise(r => setTimeout(() => {
console.log("voting");
r();
})) // for illusturation purpose
}
async function worker() {
let i = 0;
let keepGoing = true;
while (keepGoing) {
await BotVote()
await delay(600); // imagine it's 1minute.
i ;
if (i === 3) keepGoing = false; // decide when you stop
}
}
worker();
Комментарии:
1. Эльдар, спасибо за твой ответ, я попробовал, и он работает так, как я хотел. Очень благодарен за вашу помощь, хорошего дня.