收藏
回答

云函数本地测试没问题,部署到云端却操作数据库失效

框架类型 问题类型 终端类型 AppID 环境ID 基础库版本
小游戏 Bug 工具 wxddb36e5e1146299c pas-bsqu9 2.10.3

该云函数在本地测试时可以顺利实现数据库的操作,但在云端测试时却失效,数据库没有顺利更新

将云端调用的日志及相关信息粘贴如下:

内存使用

32.74 MB

Request ID

f90f941b-6ff3-11ea-a61f-525400697544

调用状态

成功

返回结果

{"event":{"gs":1,"pos":0,"rn":1}}

调用日志

START RequestId: f90f941b-6ff3-11ea-a61f-525400697544

Event RequestId: f90f941b-6ff3-11ea-a61f-525400697544

END RequestId: f90f941b-6ff3-11ea-a61f-525400697544

Report RequestId: f90f941b-6ff3-11ea-a61f-525400697544 Duration:9ms Memory:256MB MaxMemoryUsed:32.742188MB

const cloud = require('wx-server-sdk') // 与小程序端一致,均需调用 init 方法初始化 cloud.init({ // API 调用都保持和云函数当前所在环境一致 //env: cloud.DYNAMIC_CURRENT_ENV env: 'pas-bsqu9' }) // 可在入口函数外缓存 db 对象 const db = cloud.database() // 数据库查询更新指令对象 const _ = db.command // 云函数入口函数 // 云函数入口函数 exports.main = async (event, context) => { //创建一副扑克牌 let cards = [] let card1 = '' for (let i = 2; i < 11; i++) { card1 = 'S' + i cards.push(card1) } card1 = 'SJ' cards.push(card1) card1 ='SQ' cards.push(card1) card1 = 'SK' cards.push(card1) card1 = 'SA' cards.push(card1) for (let i = 4; i < 11; i++) { card1 = 'H' + i cards.push(card1) } card1 = 'HJ' cards.push(card1) card1 = 'HQ' cards.push(card1) card1 = 'HK' cards.push(card1) card1 = 'HA' cards.push(card1) card1 = 'Hjoker2' cards.push(card1) card1 = 'Hjoker1' cards.push(card1) for (let i = 2; i < 11; i++) { card1 = 'C' + i cards.push(card1) } card1 = 'CJ' cards.push(card1) card1 = 'CQ' cards.push(card1) card1 = 'CK' cards.push(card1) card1 = 'CA' cards.push(card1) for (let i = 2; i < 11; i++) { card1 = 'D' + i cards.push(card1) } card1 = 'DJ' cards.push(card1) card1 = 'DQ' cards.push(card1) card1 = 'DK' cards.push(card1) card1 = 'DA' cards.push(card1) //随机发牌 let randomc=cards.slice(0) let temp='SA' let rr=0 for (let i=0;i<52;i++){ rr=Math.floor(52*Math.random()) temp=randomc[rr] randomc[rr]=randomc[i] randomc[i]=temp } let cihtp=[] cihtp[0]=randomc.slice(0,13) cihtp[1]=randomc.slice(13,26) cihtp[2]=randomc.slice(26,39) cihtp[3]=randomc.slice(39) for (let i=0;i<4;i++){ let ind=[] let idx=0 for (let j=0;j<cihtp[i].length;j++){ idx = parseInt(cards.indexOf(cihtp[i][j])) ind.push(idx) } ind.sort((a,b)=>a-b) for (let j=0;j<cihtp[i].length;j++){ cihtp[i][j]=cards[ind[j]] } } //寻找S7 let s7i=0 let ot=['','','',''] let tn=[false,false,false,false] let r11=[] for (let i=0;i<4;i++){ s7i=cihtp[i].indexOf('S7') if (s7i >-1){ cihtp[i].splice(s7i,1) ot[i]='S7' tn[(i+1)%4]=true r11[0]=[i,'S7'] } } db.collection('player').where({ 'pos':event.pos }).update({ data:{ readysign:true }}) .then(res =>{ db.collection('player').where({ 'readysign':true}) .get() .then(res =>{ console.log(res) if (res.data.length==4){ console.log("都准备好了") db.collection('gameinfo').add({ data:{ room:event.rn, gameset: event.gs, r1:r11 } }) for (let i=0;i<4;i++){ db.collection('player').where({ 'room':event.rn, 'pos':i }).update({ data:{ pigsign:false, sheepsign:false, cent:0, outcard:ot[i], cih:cihtp[i], gets:[], geth:[], getc:[], getd:[], team:'B', turn:tn[i], } }) } } }) }) }
最后一次编辑于  03-27
回答关注问题邀请回答
收藏

2 个回答

  • Forever
    Forever
    03-27

    我查看过你的代码,发现你所有的db操作都是异步的,因为云函数的特性,只要你的异步还没有发生回调,提前进行 return 意味着云函数的整一个进程会马上关闭,那就无法继续进行db操作。

    03-27
    有用
    回复
  • Tarzan Dong
    Tarzan Dong
    03-27

    我把所有含有return的语句都改了,情况依旧

    最怪异的是本地调试都没问题啊?

    03-27
    有用
    回复 4
    • Forever
      Forever
      03-27
      你本地调试是否有使用npm包?如果有,则需要把你本地的npm包一起上传,选择上传并部署:所有文件
      03-27
      回复
    • Tarzan Dong
      Tarzan Dong
      03-27回复Forever
      是的所有都已上传,我现在把promise的嵌套减少到两层了,还是一样
      03-27
      回复
    • Forever
      Forever
      03-27回复Tarzan Dong
      能否再贴一下代码?
      03-27
      回复
    • Tarzan Dong
      Tarzan Dong
      03-27回复Forever
      好的,已经把帖子更新了
      03-27
      回复
登录 后发表内容
问题标签