作用:定时处理一些事务
例子:每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;
注意点:
- 新建或修改定时器需要重启项目
至此大功告成

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

262

被折叠的 条评论
为什么被折叠?



