nodejs中的连续任务

我使用nodejs快速为我的webapp,我需要不断运行一些代码,检查是否有一些数据更改,然后更新我的MongoDB。

我怎样才能轻松创build一个与主要任务一起运行的后台进程? 以便后台任务/进程可以通知主要任务。

我已经尝试过了:

  • 在主进程中用“setInterval”函数解决这个问题 – >我没有问题,但认为它不是一个好主意,因为它阻止了节点事件循环
  • 使用subprocess – >我找不到一个很好的教程 – >有没有更简单的方法,也许是一个图书馆,可以帮助我?
  • 一些后台工作者库 – >但是在subprocess上执行重负载任务并完成,但是我需要始终执行这项工作

更新:

最终解决scheme

UpdateEvent.js

var events = require('events'); function Updater(time) { this.time = time; this.array = [ {number: 1}, {number: 2} ]; var that; events.EventEmitter.call(this); this.init = function() { that = this; console.log("Contructor"); //Start interval setInterval(that.run,that.time); }; this.run = function() { that.array.forEach(function (item) { if(item.number === 2) { that.emit('Event'); } }); }; } Updater.prototype.__proto__ = events.EventEmitter.prototype; module.exports = Updater; 

然后使用它的代码:

server.js

 var Updater = require('./UpdaterEvent'); var u = new Updater(10000); u.init(); u.on('Event',function () { console.log("Event catched!"); }); 

我按照教程在: http : //www.sitepoint.com/nodejs-events-and-eventemitter/

问题是您导出Updater构造函数的方式:

 exports.Updater = Updater; 

当你需要的时候,你就可以

 var Updater = require('./UpdaterEvent'); 

然后尝试运行:

 var u = new Updater(10000); 

问题是你不会暴露函数本身,而是一个名为Updater的属性的对象,其中包含该函数。 因此,您必须使用导出它

 module.exports = Updater; 

或者你必须要求使用:

 var Updater = require('./UpdaterEvent').Updater; 

无论哪种方式,然后调用new Updater()将工作。 目前,您尝试通过调用对象而不是构造函数来初始化新对象,因此会出现错误消息:

TypeError:对象不是一个函数

你应该看看事件和EventEmitter

因为JS是asynchronous的,所以你可以使用你并不需要的subprocess。 只需为后台进程创build一个函数,并将其传递给eventEmitter对象。 你可以使用setInterval或while(true)循环来连续检查数据的变化。 当数据改变时,调用eventEmitter.emit('someEvent'); 这将在你的主要任务中触发一个函数来更新你的mongoDB。