我想使用Node JS以特定时间间隔执行三个函数。我已经通过这篇文章I need a Nodejs scheduler that allows for tasks at different intervals安排多个函数在节点JS(CRON JOB)中以特定间隔运行
我试过node-cron
和node-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
间隔运行。
现在monthlySnapshot
和dailySnapshot
访问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-cron
或node-schedule
的任何示例都可以。
当我单独使用nodemon notification.js
并正确发送电子邮件时,数据库访问正常。那里没有问题。
是'''notification.getViewDetails( '每月')'''和'''notification.getViewDetails( '日报' )'''阻塞函数调用?他们是从数据库获取数据,然后他们是异步调用? –
@SagarKarira:是的,他们是异步调用 – Anijit