- 小程序在使用triggers调用云函数,发送模版消息不能设置具体时间调用,必须设置多次调用才生效?
今天遇到一个很神奇的问题,使用triggers触发云函数时,如果设置具体的时间,比如设置每天20点调用,这个时候云函数是会被调用,但是消息一定不会被发送出去,最后试验发现,只要设置多次调用,那就可以。 但是感觉不应该这样做,首先这种做法偶然性太强,其次太过于耗费资源,大家在写触发消息时是怎么写的呢? // 云函数入口文件 const cloud = require('wx-server-sdk') let skipData = 0 // 分页跳过的数据 let numberPatients = [] // 患者数量 cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV, }) const db = cloud.database() // 查询当日患者 async function getTodayPatient() { let date = new Date(); let year = date.getFullYear(); let month = (date.getMonth() + 1).toString().padStart(2, '0'); let day = date.getDate().toString().padStart(2, '0'); let newDate = year + '-' + month + '-' + day; // console.log('3333',newDate) try { let res = await db.collection('patient_record') .where({ opeTime: newDate }) .skip(skipData) .limit(20) .get(); // console.log('4444',res) return res.data; } catch (error) { console.error('查询失败', error); return null; } } // 递归查询患者 async function getPatient() { let temp = [] let res = await getTodayPatient(); // console.log('2222',res) if(res && res.length > 0){ skipData = skipData + 20 temp = res } numberPatients.push(...temp) if(temp.length === 20){ // 数据存在20,表示有可能还有数据,继续递归 getPatient() }else{ return numberPatients } } /** * 循环数据发送信息给患者 * @param {object} patientsData 患者的数据 */ function sendMessage(patientsData) { const templateId = 'Gnr32LdpxdA58DX-zDGi3OSKUEmLivBJ9MBig6BSp-Q' // 模版编号 const { _openid, username, opeTime, phone } = patientsData try { cloud.openapi.subscribeMessage.send({ touser: _openid, // 通过 getWXContext 获取 OPENID page: '/pages/myLogin/index', // 点击跳转的页面 lang: 'zh_CN', data: { // 信息的内容 name1: { value: username }, date3: { value: opeTime }, phone_number4: { value: phone }, thing7: { value: '今天是您预约手术时间,请安时到达医院。' } }, templateId, miniprogramState: 'developer' }); console.log(_openid + ' ' + '订阅消息发送成功'); } catch (err) { console.error(_openid + ' ' + '订阅消息发送失败:', err); } } exports.main = async (event, context) => { // 获取患者数据,循环发送消息 let temp = await getPatient() // let logArr = [] // let logArrItem if(temp && temp.length > 0){ temp.forEach(item=>{ // logArrItem = sendMessage(item) sendMessage(item) // logArr.push(logArrItem) }) }else{ console.warn('没有预约患者需要发送通知') } // return logArr } 我是获取一个数组然后循环发送,需求是可以实现,但是总觉得这种写是错误的。 "triggers": [ { "name": "tomylove", "type": "timer", "config": "*/10 29 * * * * *" } ] 多次调用,但很多次是失败的 [图片]
07-03 - 触发器怎么触发一个函数呢?
在云函数中添加触发器 [图片] [图片] 如果只想触发云函数里面的一个函数 [图片] 这种要怎么办,还有一点不是很明白,触发器里面的name具体有什么作用呢?有没有大佬知道?
06-26 - 小程序里调用订阅通知,只能通过按钮调用吗?
今天遇到一个奇葩的问题,我在录入患者资料以后需要告知对方一些信息(如:就诊时间),我再保存以后调用授权API,就调用失败: db.doc(this.data._id) .update({data}) .then(()=>{ wx.showToast({ title: '数据修改成功', icon: 'success', duration: 1500, success:()=>{ // this.pageTo('', 1500) this.saveEditMessage() // 调用授权接受消息函数 } }) }) 我以为是自己消息函数有问题,然后使用按钮调用,然后就可以: <button type="primary" bindtap="saveEditMessage">授权</button> 调用授权(简化): saveEditMessage(){ wx.requestSubscribeMessage({ tmplIds: [tmplIds], success: res => { console.log('订阅消息 成功:' + res); }, fail: err => { console.error("订阅消息 失败:" + err); } }) } 这是我代码的问题还是小程序故意设置这种要求??如果是,实在想不通为什么要这样搞。
06-26 - 为什么我取消‘拒绝消息’还是一样报“用户拒绝消息”呢?
在开发消息模块,遇到一个问题,用户1.首先启用拒绝消息: [图片] [图片] 2.然后用户取消拒绝消息,再次发送消息,还是一样消息被拦截: [图片] [图片] 3.清除授权,再次订阅消息,发送就可以: [图片] [图片] [图片]
06-20 - 为什么始终获取不到OpenID?
[图片][图片]
03-15 - 微信小程序云开发使用有没有文档?
微信小程序云开发使用有没有文档和手册?没有文档手册怎么开发呢?
2021-04-11 - 加入企业微信时能不能关注以后就直接进入企业
企业微信我是admin,现在通过微信分享名片,点击关注以后进入企业还要点击验证身份,公司领导觉得很鸡肋,主要都是写学历不高的人,用手机费劲。有没有办法可以实现点击关注以后直接就能在企业微信管理后台管理对方呢?
2021-04-05 - 使用wx:for以后类失效是为什么?
[图片] 如上图使用wo:for循环以后class失效是为什么? [图片]
2020-12-08 - 小程序全局获取函数return的值?
App({ globalData: { dicData: ()=>{ return getDicData('xxxxxx') } } // 方法 getDicData: function(url) { return 'xxxx'} })
2020-11-27 - wxss文件获取全局变量值?
想问一下wxss能不能支持获取全局变量,比如: wxss文件中类bg中需要引入一个背景图,但是这个背景图是线上的,所以想通过统一的图片ip地址引入 如: // wxss文件 .bg{ backage-img:url('全局变量'+ 'xxxxx') }
2020-11-25