最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

NodeJs入门教程之定时器和队列

来源:懂视网 责编:小采 时间:2020-11-27 22:00:20
文档

NodeJs入门教程之定时器和队列

NodeJs入门教程之定时器和队列:一,介绍与需求 1.1,介绍 定时任务(node-schedule),是针对Node.js的一种灵活的cron-like和not-cron-like作业调度程序。它允许您使用可选的递归规则将作业(任意函数)安排在特定日期执行。它在任何给定的时间只使用一个计时器(而不是每秒钟/分钟重新评估
推荐度:
导读NodeJs入门教程之定时器和队列:一,介绍与需求 1.1,介绍 定时任务(node-schedule),是针对Node.js的一种灵活的cron-like和not-cron-like作业调度程序。它允许您使用可选的递归规则将作业(任意函数)安排在特定日期执行。它在任何给定的时间只使用一个计时器(而不是每秒钟/分钟重新评估

6个占位符从左到右分别代表:秒、分、时、日、月、周几

*表示通配符,匹配任意,当秒是*时,表示任意秒数都触发,其它类推

// 每分钟的第30秒触发: '30 * * * * *'
// 每小时的1分30秒触发 :'30 1 * * * *'
// 每天的凌晨1点1分30秒触发 :'30 1 1 * * *'
// 每月的1日1点1分30秒触发 :'30 1 1 1 * *'
// 2016年的1月1日1点1分30秒触发 :'30 1 1 1 2016 *'
// 每周1的1点1分30秒触发 :'30 1 1 * * 1'
// 每分钟的1-10秒都会触发,其它通配符依次类推 :'1-10 * * * * *'

调用定时器:

 nodeTimer.scheduleTimer('30 * * * * *',function(err){
 if(!err){
 console.log('scheduleTimer:' + new Date());
 }
 });

效果:

2、对象文本语法定时器

  • second (0-59)
  • minute (0-59)
  • hour (0-23)
  • date (1-31)
  • month (0-11)
  • year
  • dayOfWeek (0-6) Starting with Sunday
  • //每周一的下午15:03:30触发,其它组合可以根据我代码中的注释参数名自由组合
    nodeTimer.scheduleTimer({hour: 15, minute: 3, second: 30},function(err){
     if(!err){
     console.log('scheduleTimer:' + new Date());
     }
     });

    效果:

    3、基于日期的定时器

    var date = new Date(2019, 01, 07, 15, 03, 30);
    nodeTimer.scheduleTimer(date,function(err){
     if(!err){
     console.log('scheduleTimer:' + new Date());
     }
     });

    4、递归规则定时器

    参数与对象文本语法定时器的参数类似

    var rule = new schedule.RecurrenceRule();
    rule.dayOfWeek = [0, new schedule.Range(4, 6)];//每周四,周五,周六执行
    rule.hour = 15;
    rule.minute = 0;
    nodeTimer.scheduleTimer(rule,function(err){
     if(!err){
     console.log('scheduleTimer:' + new Date());
     }
     });

    5、取消定时器

    // 取消定时器
    // 调用 定时器对象的cancl()方法即可
    nodeTimer.scheduleCancel = () => {
     // 定时器取消
     cancelTimer.cancel();
     console.log('定时器成功取消');
    }

    调用:

     nodeTimer.scheduleCancel()

    效果:

    三,队列

    第一步:安装async

     npm install --save async

    第二步:封装方法

    queue相当于一个加强版的parallel,主要是限制了worker数量,不再一次性全部执行。当worker数量不够用时,新加入的任务将会排队等候,直到有新的worker可用。

    该函数有多个点可供回调,如worker用完时、无等候任务时、全部执行完时等。

    const async = require('async');
     /**
     *队列
     * @param obj :obj对象 包含执行时间
     * @param callback :回调函数
     */
    const nodeQueue = async.queue(function (obj, callback) {
     setTimeout(function () {
     // 需要执行的代码的回调函数
     if(typeof callback==='function'){
     callback();
     }
     }, obj.time)
    }, 1)
    
    // worker数量将用完时,会调用saturated函数
    nodeQueue.saturated = function() { 
     console.log('all workers to be used'); 
    }
     
    // 当最后一个任务交给worker执行时,会调用empty函数
    nodeQueue.empty = function() { 
     console.log('no more tasks wating'); 
    }
     
    // 当所有任务都执行完时,会调用drain函数
    nodeQueue.drain = function() { 
     console.log('all tasks have been processed'); 
    }
    module.exports = nodeQueue;

    第三步:调用方法

    const nodeQueue = require('./node_queue.js');
     for (let i = 0; i < 10; i++) {
     nodeQueue.push({ name: 1, time: 2000 }, function (err) {
     console.log('队列执行错误信息==',err);
     if(!err){
     // 需要执行的代码或函数
     console.log('需要执行的代码或函数第',i+1,'个')
     }
     })
     };

    效果:

    总结

    文档

    NodeJs入门教程之定时器和队列

    NodeJs入门教程之定时器和队列:一,介绍与需求 1.1,介绍 定时任务(node-schedule),是针对Node.js的一种灵活的cron-like和not-cron-like作业调度程序。它允许您使用可选的递归规则将作业(任意函数)安排在特定日期执行。它在任何给定的时间只使用一个计时器(而不是每秒钟/分钟重新评估
    推荐度:
    标签: 教程 队列 Nodejs
    • 热门焦点

    最新推荐

    猜你喜欢

    热门推荐

    专题
    Top