暂且先讨论定时任务的其中两种实现方法:

1.setInterval()

setInterval()可按照指定的周期(毫秒数计)来调用函数或者计算表达式;

setInterval()方法会不停的调用该函数,直到clearInterval()被调用或窗口被关闭。由setInterval()返回的id值可用作clearInterval()方法的参数。

而其中:

setTimeOut()方法用于在指定的毫秒后调用函数或者计算表达式,只执行code一次,若要多次调用,请使用setInterval()

1.

 function cron(){//定时器任务
let instance = think.controller("crontab", null, "admin");
instance.corntabAction();
} //服务器启动delay毫秒后,开始执行fn,每隔interval毫秒后再次执行fn
function startTasks(fn, interval, delay) {
delay = delay || 0;
setTimeout(function() {
fn();
setInterval(fn, interval);
}, delay);
}
let interval=think.config('questionsfreshtime');//问题表的定时刷新时间 毫秒 4小时 在配置文件中
startTasks(cron,interval,1000*3*60); //服务器启动3分钟后开始循环执行

2.node-crontab

https://thinkjs.org/zh-cn/doc/2.2/crontab.html

在thinkjs2.2中也有相对应的定时器处理方法(3.0存在同样的方法)

 import crontab  from "node-crontab";
let fn = () => {
//定时任务具体逻辑
//调用一个 Action
let instance = think.controller("crontab", null, "admin");
instance.corntabAction();
};
// 4 小时执行一次
// let jobId = crontab.scheduleJob('0 */4 * * *', fn);
let jobId = crontab.scheduleJob('* * * * *', fn);//1min
//开发环境下立即执行一次看效果
if(think.env === 'development'){
fn();
}

 /**
* authon:zhengyeye
* create:2018-05-14
* update:2018-05-14
* desc:定时器操作类
*/ 'use strict'; import Base from './base.js';
export default class extends Base {
/**
* 定时刷新问答表的状态
*
* @returns
*/
async corntabAction(){
//48小时审核通过未回答 改问题状态为已失效 4h
//找出问答表中的提问时间 现在时间-提问时间>4小时&&问题状态status为1 的,并更新其状态为-2
let questionsModel = this.model("questions");
let nowtimestamp = parseInt(new Date().getTime() / 1000);//当前时间戳
let timerange = nowtimestamp-this.config("outquestionstime");
await questionsModel.where({asktime:["<",timerange],status:1}).update({status:-2});
return this.success();
}
}

node-crontab:https://github.com/dachev/node-crontab

其实在使用过程中,我好像发现node-schedule  https://github.com/node-schedule/node-schedule 更受欢迎些。其实选哪种,凭个人喜好。

thinkjs2.2中的定时任务的更多相关文章

  1. spring项目中使用定时任务

    当我们希望在某个时间点来执行一些业务方法的时候就用到定时任务,在spring的项目中使用定时任务很简单.如下 第一步.加入jar包 <dependency> <groupId> ...

  2. 用crontab、crond在嵌入式系统中添加定时任务

    在嵌入式系统中,定时任务通过crond和cronttab两个系统命令来联合执行. 其中crond是定时任务的守护进程,系统开始时是没有开启的.crontab主要作用是管理用户的crontab file ...

  3. 在Java Web项目中添加定时任务

    在Java Web程序中加入定时任务,这里介绍两种方式:1.使用监听器注入:2.使用Spring注解@Scheduled注入. 推荐使用第二种形式. 一.使用监听器注入 ①:创建监听器类: impor ...

  4. Spring Boot 中实现定时任务的两种方式

    在 Spring + SpringMVC 环境中,一般来说,要实现定时任务,我们有两中方案,一种是使用 Spring 自带的定时任务处理器 @Scheduled 注解,另一种就是使用第三方框架 Qua ...

  5. springBoot中的定时任务

    springBoot中的定时任务 1:在Spring Boot的主类中加入@EnableScheduling注解,启用定时任务的配置 2:新建ScheduledTasks任务类 : package c ...

  6. Storm中的定时任务

    1.全局定时器 import java.util.Map; import backtype.storm.Config; import backtype.storm.Constants; import ...

  7. 如何用 Java 实现 Web 应用中的定时任务?

    定时任务,是指定一个未来的时间范围执行一定任务的功能.在当前WEB应用中,多数应用都具备任务调度功能,针对不同的语音,不同的操作系统, 都有其自己的语法及解决方案,windows操作系统把它叫做任务计 ...

  8. linux 中的定时任务crontab使用方法

    linux 中的定时任务crontab使用方法: 切换到root用户,sudo su root (可以设置成不需要输入密码) sudo su - (需要输入当前帐号的密码才能进入.) crontab ...

  9. Django中通过定时任务触发页面静态化的方式

    安装 pip install django-crontab 添加应用 INSTALLED_APPS = [ ... 'django_crontab', # 定时任务 ... ] 设置任务的定时时间 在 ...

随机推荐

  1. 【转】【MySQL】Mysql模糊查询like提速优化

    在使用msyql进行模糊查询的时候,很自然的会用到like语句,通常情况下,在数据量小的时候,不容易看出查询的效率,但在数据量达到百万级,千万级的时候,查询的效率就很容易显现出来.这个时候查询的效率就 ...

  2. 第三百三十六节,web爬虫讲解2—urllib库中使用xpath表达式—BeautifulSoup基础

    第三百三十六节,web爬虫讲解2—urllib库中使用xpath表达式—BeautifulSoup基础 在urllib中,我们一样可以使用xpath表达式进行信息提取,此时,你需要首先安装lxml模块 ...

  3. win10 .net framework 3.5无法安装错误代码0x800F081F

    复制链接:http://download.windowsupdate.com/d/msdownload/update/software/updt/2015/11/microsoft-windows-n ...

  4. C# 让枚举返回字符串

    下面的手段是使用给枚举项打标签的方式,来返回字符串 分别定义一个属性类,一个枚举帮助类 /// <summary> /// 自定义属性 /// </summary> [Attr ...

  5. R语言 vegan包计算物种累计曲线

    vegan 包是进行群落数据分析最常用的R包,其中的 specaccum 函数用来计算物种的累计曲线 首先看下官方示例: library(vegan) data(BCI) sp1 <- spec ...

  6. HTTP 错误 500.19 配置文件错误 ( 0x8007000d,0x80070032)

    HTTP 错误 500.19 - Internal Server Error无法访问请求的页面,因为该页的相关配置数据无效. 详细错误信息模块 IIS Web Core 通知 未知 处理程序 尚未确定 ...

  7. ASP.NET MVC Castle Windsor 教程

    一.[转]ASP.NET MVC中使用Castle Windsor 二.[转]Castle Windsor之组件注册 平常用Inject比较多,今天接触到了Castle Windsor.本篇就来体验其 ...

  8. C# ListView控件使用简介

    ListView控件在各类程序中,具有数据显示直观,操作方便的特点.所以使用率极高,但控件的各类参数众多,很多初学者不易掌握,在此列举该控件的一些常用方法,属性,希望对初学者有一定帮助. //2005 ...

  9. 干货分享 超炫丽的HTML5/jQuery应用及代码

    今天我们要来分享一些HTML5干货,对于前段开发者来说,这些HTML5应用和jQuery插件将会让你的项目更加生动和炫丽,至少在UI设计方面,或多或少会带给你一点设计灵感,赶紧收藏和分享吧.另外这些H ...

  10. Xshell的常用命令

    常用的命令: suse linux 常用命令 (1) 命令ls——列出文件 ls  显示当前目录文件 ls -la 给出当前目录下所有文件的一个长列表,包括以句点开头的“隐藏”文件 ls a* 列出当 ...