小程序云函数+触发器更新数据库失败(仅上传云函数后第一次调用时成功) [你这句话把握搞懵了。]+ 查看更多
小程序云函数+触发器更新数据库失败(仅上传云函数后第一次调用时成功) [你这句话把握搞懵了。]
+ 查看更多
- 当前 Bug 的表现(可附上截图)
在小程序云开发中:在云函数里使用触发器更新数据库里的数据,只有上传后第一次执行成功:
云函数 getYi 的日志:
返回结果: { "stats" :{ "updated" :1}, "errMsg" : "document.update:ok" }
|
后面自动执行的都显示:
云函数 getYi 的日志:
返回结果: { "stats" :{ "updated" :0}, "errMsg" : "document.update:ok" }
|
虽然显示云函数调用成功,但检查数据库发现后面触发器自动执行后,数据库里的数据没有得到更新。
- 预期表现
使用触发器云函数update数据库数据,数据每次应该得到更新。
- 复现路径
云函数 getYi 的主要代码:
// config.json
其中触发器每10s执行一次。
// index.js
云数据库yiDB:有一个_ID是 yiDB-data 的数据,但是上传部署云函数 getYi 后,只有第一次执行时能更新 yiDB-data 数据,后面触发器每隔10s自动执行的都更新不了数据。
-
, 如果你什么都不说,我也不知道怎么回答你呀云函数实际在执行用户请求的时候,是起了一个容器,当短时间内频繁有用户请求的时候,容器会进行复用已加快响应速度。 因此,如果想要代码每次都会被执行,需要把代码逻辑写到main函数内部。复用容器的时候,初始化代码(main函数外)只会被首次执行 , 都说“女子无才便是德”,我想我应该是德高望重了。
-
是的!, 我反对,我认为不是
, 如果你什么都不说,我也不知道怎么回答你呀 -
-
, 如果你什么都不说,我也不知道怎么回答你呀怎么解决的啊,可不可以详细点 , 你要多详细?, 如果你什么都不说,我也不知道怎么回答你呀
-
, 如果你什么都不说,我也不知道怎么回答你呀该问题已解决,要执行的内容必须都放在 exports.main 里面。, 里面好玩吗
-
兄弟详细点啊, 你觉得把兄弟看做一种身份怎么样?
-
这么写 exports.main = async (event, context) => { try { // 放在这里 var yiArr = ['t1', 't2', 't3'] var index = Math.floor((Math.random() * yiArr.length)); var yige = yiArr[index] return await db.collection('yiDB').doc('yiID').update({ // data 传入需要局部更新的数据 data: { // 表示将 result 字段置为 yige result: yige } }) } catch (e) { console.error(e) } } , 说的貌似很有深意,你能一条一条说么?
-
// 云函数入口文件 const cloud = require('wx-server-sdk') cloud.init() const db = cloud.database() const _ = db.command // 云函数入口函数 exports.main = async (event, context) => { try { return await db.collection('news').doc(event._id).update({ // data 传入需要局部更新的数据 data: { pageviews:event.pageviews } }) } catch (e) { console.error(e) } } index.js wx.cloud.callFunction({ // 云函数名称 name: 'addPageView', // 传给云函数的参数 data: { _id:this.data_id, pageviews:pageviews }, success: function (res) { console.log(res) }, fail: console.error }) 为什么我这样写,点击按钮只修改成功第一次,第二次就开始是 update 为0 了 , 说的貌似很有深意,你能一条一条说么?
-
你这个应该是新增一条,不是更新一条吧,应该用collection('news').doc(event._id).set 吧,你看一下文档, 听到这个字我的眼神瞬间迷离,那个让我魂牵梦绕的网吧啊。
, 如果你什么都不说,我也不知道怎么回答你呀 -