《node.js定時(shí)器node-schedule模塊》要點(diǎn):
本文介紹了node.js定時(shí)器node-schedule模塊,希望對(duì)您有用。如果有疑問(wèn),可以聯(lián)系我們。
相關(guān)主題:node.js web開(kāi)發(fā)
類(lèi)似模塊:
1、 later (不推薦)
2、node-cron : https://github.com/kelektiv/node-cron
3、cron:
在實(shí)際開(kāi)發(fā)項(xiàng)目中,會(huì)遇到很多定時(shí)任務(wù)的工作。比如:定時(shí)導(dǎo)出某些數(shù)據(jù)、定時(shí)發(fā)送消息或郵件給用戶(hù)、定時(shí)備份什么類(lèi)型的文件等等
一般可以寫(xiě)個(gè)定時(shí)器,來(lái)完成相應(yīng)的需求,在node.js中自已實(shí)現(xiàn)也非常容易,接下來(lái)要介紹的是node-schedule來(lái)完成定時(shí)任務(wù)
下面就用示例來(lái)說(shuō)明一下node-schedule的用法。
node-schedule:https://github.com/node-schedule/node-schedule
安裝:
npm install node-schedule
var schedule = require('node-schedule'); function scheduleCronstyle(){ schedule.scheduleJob('30 * * * * *', function(){ console.log('scheduleCronstyle:' + new Date()); }); } scheduleCronstyle();
schedule.scheduleJob的回調(diào)函數(shù)中寫(xiě)入要執(zhí)行的任務(wù)代碼,一個(gè)定時(shí)器就完成了!
下面我們?cè)賮?lái)講講Cron風(fēng)格定時(shí)器傳入的參數(shù)具體代表什么,先來(lái)看看上面執(zhí)行結(jié)果,如下圖
從輸出結(jié)果可以看出,傳入的'30 * * * * *'帶來(lái)的結(jié)果是每分鐘的30秒時(shí)都會(huì)執(zhí)行,下面來(lái)看看這個(gè)傳入?yún)?shù)分別代碼什么
* * * * * *
┬ ┬ ┬ ┬ ┬ ┬
│ │ │ │ │ |
│ │ │ │ │ └ day of week (0 - 7) (0 or 7 is Sun)
│ │ │ │ └───── month (1 - 12)
│ │ │ └────────── day of month (1 - 31)
│ │ └─────────────── hour (0 - 23)
│ └──────────────────── minute (0 - 59)
└───────────────────────── second (0 - 59, OPTIONAL)
6個(gè)占位符從左到右分別代表:秒、分、時(shí)、日、月、周幾
'*'表示通配符,匹配任意,當(dāng)秒是'*'時(shí),表示任意秒數(shù)都觸發(fā),其它類(lèi)推
下面可以看看以下傳入?yún)?shù)分別代表的意思
每分鐘的第30秒觸發(fā): '30 * * * * *'
每小時(shí)的1分30秒觸發(fā) :'30 1 * * * *'
每天的凌晨1點(diǎn)1分30秒觸發(fā) :'30 1 1 * * *'
每月的1日1點(diǎn)1分30秒觸發(fā) :'30 1 1 1 * *'
2016年的1月1日1點(diǎn)1分30秒觸發(fā) :'30 1 1 1 2016 *'
每周1的1點(diǎn)1分30秒觸發(fā) :'30 1 1 * * 1'
這樣很容易根據(jù)自已的需求用簡(jiǎn)短的代碼去實(shí)現(xiàn)。
上面的傳入?yún)?shù)占位符中還可以傳入范圍,比如下面示例
var schedule = require('node-schedule'); function scheduleCronstyle(){ schedule.scheduleJob('1-10 * * * * *', function(){ console.log('scheduleCronstyle:' + new Date()); }); } scheduleCronstyle();
結(jié)果如下圖:
從輸出結(jié)果可以看出每分鐘的1-10秒都會(huì)觸發(fā),
其它占用符使用方法一樣,輸入范圍可以看到參考前面"通配符解釋"
再看看另一種風(fēng)格寫(xiě)定時(shí)器
var schedule = require('node-schedule'); function scheduleRecurrenceRule(){ var rule = new schedule.RecurrenceRule(); // rule.dayOfWeek = 2; // rule.month = 3; // rule.dayOfMonth = 1; // rule.hour = 1; // rule.minute = 42; rule.second = 0; schedule.scheduleJob(rule, function(){ console.log('scheduleRecurrenceRule:' + new Date()); }); } scheduleRecurrenceRule();
結(jié)果如下圖:
從結(jié)果中可以看出,每分鐘第60秒時(shí)就會(huì)觸發(fā),其它規(guī)則可以看我注釋中的代碼,當(dāng)然,也可以組合使用,達(dá)到需求效果!
var schedule = require('node-schedule'); function scheduleObjectLiteralSyntax(){ //dayOfWeek //month //dayOfMonth //hour //minute //second schedule.scheduleJob({hour: 16, minute: 11, dayOfWeek: 1}, function(){ console.log('scheduleObjectLiteralSyntax:' + new Date()); }); } scheduleObjectLiteralSyntax();
結(jié)果如下圖:
代碼實(shí)現(xiàn)的是每周一的下午16:11分觸發(fā),其它組合可以根據(jù)我代碼中的注釋參數(shù)名自由組合
示例如下,定時(shí)器對(duì)象的cancl方法即可
var schedule = require('node-schedule'); function scheduleCancel(){ var counter = 1; var j = schedule.scheduleJob('* * * * * *', function(){ console.log('定時(shí)器觸發(fā)次數(shù):' + counter); counter++; }); setTimeout(function() { console.log('定時(shí)器取消') j.cancel(); }, 5000); } scheduleCancel();
結(jié)果如下:
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.snjht.com/jiaocheng/14633.html