2017-06-14 78 views
0

我想使用Node JS以特定时间间隔执行三个函数。我已经通过这篇文章I need a Nodejs scheduler that allows for tasks at different intervals安排多个函数在节点JS(CRON JOB)中以特定间隔运行

我试过node-cronnode-schedule。但它不工作!

我的代码是像下面,

var schedule = require('node-schedule') 


var fs = require('fs') 
var tar = require('tar') 

var notification = require('./notification') 

let changeInDir = function() { 
    console.log('Testing CRON JOB !!!', new Date().toLocaleString()) 
    fs.watch('./test', (event, filename) => { 
     console.log('a', event, 'event occurred.. on file', filename) 
    }) 
} 

// schedule a CRON Job 
var changeFile = schedule.scheduleJob('4 * * * * *', changeInDir); 


// send the Monthly snapshots 
var monthlySnapshot = schedule.scheduleJob('5 * * * * *', notification.getViewDetails('Monthly')) 

// send the Daily snapshots 
var dailySnapshot= schedule.scheduleJob('10 * * * * *', notification.getViewDetails('Daily')) 

我想这是monthlySnapshot将在5 seconds区间运行,而dailySnapshot将在10 seconds区间运行,changeFile将在4 seconds间隔运行。

现在monthlySnapshotdailySnapshot访问MySQL数据库以获取数据并相应地发送电子邮件。如果我只安排changeFile并评论其他人,它工作正常。但是,当我尝试执行所有三个它会给出以下错误信息并崩溃。

C:\Users\asau\Documents\LeaderBoardNodejs\archlb\src\server\node_modules\node-schedule\lib\schedule.js:174 
    this.job.execute(); 
      ^

TypeError: this.job.execute is not a function 
    at Job.invoke (C:\Users\asau\Documents\LeaderBoardNodejs\archlb\src\server\node_modules\node-schedule\lib\schedule.js:174:14) 
    at Timeout._onTimeout (C:\Users\asau\Documents\LeaderBoardNodejs\archlb\src\server\node_modules\node-schedule\lib\schedule.js:542:11) 
    at ontimeout (timers.js:365:14) 
    at tryOnTimeout (timers.js:237:5) 
    at Timer.listOnTimeout (timers.js:207:5) 
[nodemon] app crashed - waiting for file changes before starting... 

如何解决?使用node-cronnode-schedule的任何示例都可以。

当我单独使用nodemon notification.js并正确发送电子邮件时,数据库访问正常。那里没有问题。

+0

是'''notification.getViewDetails( '每月')'''和'''notification.getViewDetails( '日报' )'''阻塞函数调用?他们是从数据库获取数据,然后他们是异步调用? –

+0

@SagarKarira:是的,他们是异步调用 – Anijit

回答

0

我使用节点的cron https://www.npmjs.com/package/cron

var momentTz = require('moment-timezone'); 
var CronJob = require('cron').CronJob; 
var job = new CronJob('*/4 * * * * *', function() { 
var a = momentTz.tz("Europe/Helsinki"); 
//your logic 
}, function() { 

    console.log('work ended'); 
}, 
true, 
'Europe/Helsinki' 
); 

job.start(); 

它每4秒

+0

也请给出您的评论。我也想知道我的错误。 –

+0

是的,那'cron'模块适合我... !!! – Anijit