Javascript 使用节点JS运行连续后台作业

Javascript 使用节点JS运行连续后台作业,javascript,node.js,Javascript,Node.js,假设有一个任务a和其他n个任务。我希望一个任务a与其他n个任务并行运行。任务A只是每5秒钟从队列中提取一次数据 我是NodeJS的新手。是否有任何方法可以在后台运行此任务/作业A或有任何解决方案???您可以使用标准的setTimeout()方法 function task() { console.log("Timer"); setTimeout(task, 5000); } task(); 很大程度上取决于任务是什么。如果我理解你的问题,你可以用两种方法来完成:1,运行一个带计时器的

假设有一个任务a和其他n个任务。我希望一个任务a与其他n个任务并行运行。任务A只是每5秒钟从队列中提取一次数据


我是NodeJS的新手。是否有任何方法可以在后台运行此任务/作业A或有任何解决方案???

您可以使用标准的
setTimeout()
方法

function task() {
  console.log("Timer");
  setTimeout(task, 5000);
}

task();

很大程度上取决于任务是什么。如果我理解你的问题,你可以用两种方法来完成:1,运行一个带计时器的函数,2,生成一个子进程

一,

二,

如果在主进程中要做很多其他事情,您可能会选择2而不是1,因为节点是单线程的。还应该指出,在某些情况下,可能有更好的方法来做到这一点。例如,在基于云的webapp中,我可能依赖PAAS的服务来运行后台任务。你可能还想调查一下

这是一篇关于如何在webapps中处理后台作业的好文章。但是,它不是特定于节点的。它也是特定于Heroku平台的。

请查看 这是一个易于使用的节点消息队列系统。基本上,您将有一个节点程序将东西放入队列,以及其他处理队列的进程


因此,任务A将每5秒运行一次(cron,如果您愿意,或者其他系统)。它将查看队列并处理相关项目。其他n个工作人员将共享Kue的配置,但只会推动事件。

是的,当然有。不知道如何在不知道自己想做什么的情况下提供更多信息。定义“后台工作”。。。你是说在系统级,还是在你的应用程序中?实际上,在单节点JS进程中是不可能的,因为节点JS是单线程的,即根本没有并行性。我同意@Brad,有很多方法可以让事情同时发生,所以我认为问题中没有足够的信息来做出深思熟虑的建议。根据任务是本地的还是远程的、是否相互依赖、必须在不同的服务器之间平衡等等,你会采取不同的方法。你想做什么?@freakish,这并不完全准确。JavaScript只有一个线程,但IO和其他线程都没有。不过这没关系,如果没有任何其他信息,就无法知道他正在尝试做什么,以及是否需要额外的线程。嗨,这就是我正在尝试做的。。。我有两种方法,比如X和Y,这两种方法都在队列中推送一些数据。方法X和Y被调用了20次,如X()、Y()、X()、Y()……等等。在执行这些方法的同时,我希望定期从队列中检索数据,并对数据执行一些操作。非常感谢。。!早些时候,我只使用了setInterval。但setInterval代码必须先等待n个任务完成,才能轮到它。生成一个进程并运行setInterval似乎是正确的方法。节点中的spawn和fork之间到底有什么区别?这里有一个很好的答案:。您介意将其标记为正确吗?这不是在浏览器中运行的,因此这显然不是一个解决方案。程序将调用setInterval(或者setTimeout,如果您使用它的话),然后从末尾掉下来并终止。@RickO'Shea,谢谢您的评论。这不是我所经历的行为。如果我用
setInterval(()=>{},1000)创建一个节点脚本function taskA(){...}

setInterval(taskA,5000);
//same code as 1, but in a child process
var spawn = require('child_process').spawn,
ls    = spawn('taskA.js');
//taskA.js has the code from example 1