如何在 'while-loop' 中停止 node-cron 计划
how can i stop node-cron schedule in 'while-loop'
我想使用 node-cron 获取特定 url 的响应。
如以下示例代码所示,'scheduler' 每 10 秒向特定 url 请求一次。
但是,我希望这个动作只执行 10 次。
(可能还有其他方法,但我肯定想用node-crone的'start'和'stop'方法。)
好想用while语句。。我写的代码没有等待'start'方法的响应,结果死循环了。
我把我写的代码留在下面,所以如果你有解决方案,请回复。谢谢!!
import cron from 'node-cron';
import axios from 'axios';
import fsPromise from 'fs/promises';
let cronCnt = 0;
const cronSchedule = cron.schedule(
'*/10 * * * * *,',
async () => {
try {
const result = await axios.get(options);
await fsPromise.writeFile(path, result.data, { encoding: 'utf-8' });
cronCnt += 1;
} catch (e) {
console.error(e);
}
},
{
scheduled: false,
},
);
(async () => {
while (true) {
if (cronCnt < 10) {
await cronSchedule.start(); // i know.. 'cron.start()' doesnt'return promise... :(
} else {
await cronSchedule.stop(); // i know.. 'cron.stop()' doesnt'return promise... :(
break;
}
}
})();
几件事:
调度 */10 * * * * *,
导致异常。您只需删除最后一个逗号即可。
看看 node-cron 代码 here in GitHub。更多内容请见下文。
在循环中调用 start()
时,您实质上是在安排要完成的工作,然后清除要在下一次调用中安排的工作,因为 start()
中的第一行清除了之前的所有工作定时器。
那么,让我们node-cron
进行调度:
(() => {
cronSchedule.start()
while (true) {
if (cronCnt < 10) {
// i would sleep here for a second or something
} else {
cronSchedule.stop();
break;
}
}
})();
我想使用 node-cron 获取特定 url 的响应。
如以下示例代码所示,'scheduler' 每 10 秒向特定 url 请求一次。
但是,我希望这个动作只执行 10 次。
(可能还有其他方法,但我肯定想用node-crone的'start'和'stop'方法。)
好想用while语句。。我写的代码没有等待'start'方法的响应,结果死循环了。
我把我写的代码留在下面,所以如果你有解决方案,请回复。谢谢!!
import cron from 'node-cron';
import axios from 'axios';
import fsPromise from 'fs/promises';
let cronCnt = 0;
const cronSchedule = cron.schedule(
'*/10 * * * * *,',
async () => {
try {
const result = await axios.get(options);
await fsPromise.writeFile(path, result.data, { encoding: 'utf-8' });
cronCnt += 1;
} catch (e) {
console.error(e);
}
},
{
scheduled: false,
},
);
(async () => {
while (true) {
if (cronCnt < 10) {
await cronSchedule.start(); // i know.. 'cron.start()' doesnt'return promise... :(
} else {
await cronSchedule.stop(); // i know.. 'cron.stop()' doesnt'return promise... :(
break;
}
}
})();
几件事:
调度
*/10 * * * * *,
导致异常。您只需删除最后一个逗号即可。看看 node-cron 代码 here in GitHub。更多内容请见下文。
在循环中调用 start()
时,您实质上是在安排要完成的工作,然后清除要在下一次调用中安排的工作,因为 start()
中的第一行清除了之前的所有工作定时器。
那么,让我们node-cron
进行调度:
(() => {
cronSchedule.start()
while (true) {
if (cronCnt < 10) {
// i would sleep here for a second or something
} else {
cronSchedule.stop();
break;
}
}
})();