gpt4 book ai didi

javascript - 使用 while 循环创建 cron 作业

转载 作者:行者123 更新时间:2023-11-30 11:38:02 25 4
gpt4 key购买 nike

有几个库(特别是 NodeJS 和 Javascript)允许您实现 cron 作业并随后将它们托管在服务器上。

本质上,在我看来,cron 作业只不过是在一天的特定时间/日期执行的重复任务。

我想知道这些库之间有什么区别,我们就说一个自定义的 while 循环。例如,在 Javascript 中我们可以这样写:

var keepRunning = true
while (keepRunning) {
setTimeout(function () {
// call function to be executed when time constraint satisfied
}, 5000);
}

因此我的问题是:

  • 为什么我们使用 cron 作业库?与上面的自定义函数相比有什么好处?

最佳答案

这不会像你想象的那样工作:

var keepRunning = true
while (keepRunning) {
setTimeout(function () {
// call function to be executed when time constraint satisfied
}, 5000);
}

keepRuning 为 true 时,该代码将尽快调度新的 setTimeout 回调,永远不会展开调用堆栈并让事件循环运行任何这些回调。它可能会耗尽您的所有内存,甚至一次都不运行计划的代码。

你可以做的是这样的:

var keepRunning = true;
function run() {
if (keepRunning) {
// call function to be executed when time constraint satisfied
setTimeout(run, 5000);
}
}
setTimeout(run, 5000);

如果您想一次安排所有回调,那么您可以这样做:

for (let i = 1; i <= 100; i++) {
setTimeout(function () {
// call function to be executed when time constraint satisfied
}, 5000 * i);
}

但是在这个例子中,您需要将超时乘以迭代变量,以确保它们不会被安排在同一时间运行 - 即它们仍然被同时安排,但稍后会在不同的时间运行。

请记住,JavaScript 会运行到完成,并且稍后当调用堆栈展开时会执行回调。同样重要的是,forwhile 循环会阻止事件循环执行,并且在循环运行时无法处理任何事件。

关于javascript - 使用 while 循环创建 cron 作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43667042/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com