之前业余时间,开发了一个微信小程序【时间胶囊】,其中有个功能是用户在发布胶囊的时候,会要求用户订阅消息,云开发后台定时轮询,满足条件,触发云函数,将消息推送给用户。这个功能用到了小程序的定时触发器。
官方文档写的也比较清楚,用法简单,首先,我们要有云函数,或者说你新建云函数,新建完成之后会生成config.json、index.js、package.json,index.js这个文件云函数的主文件,所有的逻辑都写在这里面,package.json项目依赖清档,这里我们用不到,config.json这个文件是本文用到的,如果你在生成云函数的时候没有生成config.json文件,可以手动创建。
上面图片目录下文件多出来的几个是由于我使用了云函数本地调试,云函数我们就正常开发即可,这个定时任务最后加是没问题的。
1. name
之前在小程序社区看到有人说,这个name要和云函数的名字保持一致,这个是不需要的,只要保证这个名字和其它的定时任务的名字不一致即可,
2. type
代码语言:javascript复制type: 触发器类型,目前仅支持 timer (即 定时触发器)
3. config
Cron 表达式,这个要是想了解的话,去小程序文档中查看吧,写的很详细,这里我们就简单写几种。
代码语言:javascript复制## 表示每5秒触发一次
*/5 * * * * * *
## 表示在每月的1日的凌晨2点触发
0 0 2 1 * * *
## 表示在周一到周五每天上午10:15触发
0 15 10 * * MON-FRI *
## 表示在每天上午10点,下午2点,4点触发
0 0 10,14,16 * * * *
## 表示在每天上午9点到下午5点内每半小时触发
0 */30 9-17 * * * *
## 表示在每个星期三中午12点触发
0 0 12 * * WED *
配置完了不代表就已经可以用了,需要上传触发器,config.json文件,右击选择上传触发器。这个和你当前的环境有关,切换环境后还需要重新上传。此时已经可以根据你设置的规则触发了。
你以为这就完了?
测试下来你会发现,本地测试始终是好的,但是当发布或者预览,是一定有问题的,因为你漏看了下面的。
云函数中的时区为 UTC 0,不是 UTC 8,而触发器的规则时区是UTC 8,这就会导致,始终是差8个小时。因此需要配置函数的环境变量,设置 TZ 为 asia/shanghai。
如果你小程序有多个环境,每个环境都需配置。这操作下来,基本就没问题了,就可以愉快的玩耍了。