微信云开发 之 触发器

1 篇文章 0 订阅
1 篇文章 0 订阅

上一篇介绍我开发小程序的同时,已经简单的介绍了微信云开发的CURD了,接下来由于微信小程序的新功能,需要用到定时器触发器,于是就遇到了一个坑。

完整代码我会放在最下方,有需要直接拉到最后,要注意配置定时任务的时间

云开发定时触发器

首先触发器也是一个云函数,只不过是需要在开发云函数的时候,需要额外做一些配置定时配置,以及额外操作。

  • 首先创建一个云函数

如果代码中有相关的依赖包,在上传云函数的时要安装依赖。如我的云函数中需要moment,就要为云函数安装依赖。

此时你得到的是一个普通的云函数,接下来在config.js文件中加入定时触发器的配置

随后同步云函数,再上传云触发器

你以为到这里就万事大吉了??? 不,还有一个坑,就是时间配置 当你在本地测试都是正常的时候,一到线上,发现不对劲,其实的触发器的时间环境配置不对,默认会晚8个小时。

需要加一个云函数环境变量

配置信息 :key:TZ   value:Asia/shanghai

到此结束~ 可以开始线上测试了,

云函数执行后的日志都在这里

已上线小程序~

微信小程序:【打工猫的在逃计划】

完整代码

const moment = require('moment')
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) // 使用当前云环境
const db = cloud.database()
const kTableName = 'planList'
const errorLogName = 'errorLog'
const MAX_LIMIT = 100
// 云函数入口函数
exports.main = async (event, context) => {
  try {
    // 先取出集合记录总数
    const countResult = await db.collection(kTableName).count()
    const total = countResult.total
    // 计算需分几次取
    const batchTimes = Math.ceil(total / MAX_LIMIT)
    // 承载所有读操作的 promise 的数组
    const tasks = []
    const _ = db.command
    for (let i = 0; i < batchTimes; i++) {
      const promise = db.collection(kTableName).skip(i * MAX_LIMIT).limit(MAX_LIMIT).where({
        planEndDate: _.lte(moment().format('yyyy-MM-DD')),
        status: '1'
      }).get()
      tasks.push(promise)
    }
    const promiseAll = await Promise.all(tasks)
    for (let pageInx = 0; pageInx < promiseAll.length; pageInx++) {
      const pageItem = promiseAll[pageInx].data;
      for (let listInx = 0; listInx < pageItem.length; listInx++) {
        let item = pageItem[listInx];
        try {
          await db.collection(kTableName).doc(item._id).update({
            data: {
              status: '2',
              updateTime: moment().format('yyyy-MM-DD')
            }
          })
        } catch (e) {
          await db.collection(errorLogName).add({
            data: {
              error: e,
              data: JSON.stringify(item),
              createTime: moment().format('yyyy-MM-DD')
            },
          })
        }
      }
    }
    return {
      data: 'success',
      code: 200
    }
  } catch (error) {
    return {
      data: 'error',
      code: 500
    }
  }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值