eggjs 定时任务实战

本文档展示了如何通过定时任务在Node.js应用中每5分钟检查并关闭一批超过时间限制未支付的订单。代码示例中,定时器在`app/schedule/closeOrder.js`中定义,调用`orderService`来更新状态为2。服务层使用Sequelize查询超时订单,并批量更新状态。注意,修改定时器后需重启项目。

作用:定时处理一些事务

例子:每5分钟关闭一批超时未支付的的订单

先看结果

在这里插入图片描述

定时器

路径:app/schedule/closeOrder.js

// 关闭超时未支付的订单
module.exports = {
  schedule: {
    interval: '5m',
    type: 'all', 
  },
  async task(ctx) {
    let now = new Date()
    console.log('定时器-关闭过期的订单---', now);
    await ctx.service.order.closeOverTimeOrder();
  },
};

服务

const {Op} = require('sequelize')
const Service = require('egg').Service;

class OrderService extends Service {
  // 关闭超时未支付的订单
  async closeOverTimeOrder() {
    let orders = await this.app.model.Order.findAll({where:{
      status:1,
      over_time: {
        [Op.lte]: new Date()
      }
    }, raw: true});
    console.log('orders----: ', orders);
    if(orders.length>0){
      for(let i=0;i<orders.length;i++){
        await this.app.model.Order.update({status: 2}, {where: {id: orders[i].id}})
      }
    }
  }  
}
module.exports = OrderService;

注意点:

  1. 新建或修改定时器需要重启项目

至此大功告成
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值