收藏
回答

我写个云函数,操作数据库的,怎么感觉不是按顺序执行?

// 云函数入口文件

const cloud = require('wx-server-sdk')




cloud.init();


const db = cloud.database();


var user = null ;


// 云函数入口函数

exports.main = (event, context) => {

console.log("1")

console.log(event);

const wxContext = cloud.getWXContext();

try {

//先用openid去查询数据库里存不存在记录。不存在则插入,存在则更新。

db.collection('userInfo').where({

openid:wxContext.OPENID // 填入当前用户 openid

}).get().then(res => {

console.log(res.data)

console.log("2")

if(res.data){

console.log("3")

//更新

db.collection('userInfo').where({

openid:wxContext.OPENID

})

.update({

data: {

avatarUrl: event.updateData.avatarUrl,

city: event.updateData.city,

country: event.updateData.country,

gender: event.updateData.gender,

language: event.updateData.language,

nickName: event.updateData.nickName,

province: event.updateData.province,

},

})

}else{

console.log("4")

//插入

db.collection('userInfo').add({

// data 字段表示需新增的 JSON 数据

data: {

// _id: 'todo-identifiant-aleatoire', // 可选自定义 _id,在此处场景下用数据库自动分配的就可以了

openid: wxContext.OPENID,

appid: wxContext.APPID,

avatarUrl: event.updateData.avatarUrl,

city: event.updateData.city,

country: event.updateData.country,

gender: event.updateData.gender,

language: event.updateData.language,

nickName: event.updateData.nickName,

province: event.updateData.province,

createTime: new Date(),

isVip: false

}

})

}

})

console.log("5")


db.collection('userInfo').where({

openid:wxContext.OPENID // 填入当前用户 openid

}).get().then(res => {

console.log("6")

console.log(res.data[0])

user = res.data[0];

})


console.log("7")

return {

event,

openid:wxContext.OPENID,

appid:wxContext.APPID,

unionid:wxContext.UNIONID,

user

}

} catch (e) {

console.error(e)

}

}

本地调试日志如图

回答关注问题邀请回答
收藏

3 个回答

  • 老张
    老张
    02-03

    你发现真相了。

    02-03
    赞同
    回复
  • 拾忆
    拾忆
    02-02

    小程序里默认的请求都是异步的。

    02-02
    赞同
    回复 2
    • leo
      leo
      02-03
      那像我这种功能该怎么写呢?先查询存在不存在 存在则更新,不存在插入,最后在查一遍数据返回。
      02-03
      回复
    • 拾忆
      拾忆
      02-03回复leo

      就是你下面说的回调成功后再往下处理

      02-03
      回复
  • undefined
    undefined
    02-02

    不用感觉,异步这个明白吗?

    02-02
    赞同
    回复 5
    • leo
      leo
      02-03
      那像我这种功能该怎么写呢?先查询存在不存在 存在则更新,不存在插入,最后在查一遍数据返回。
      02-03
      回复
    • undefined
      undefined
      02-03回复leo
      嵌套,哪里能获取到,你就把代码写到哪里
      02-03
      回复
    • leo
      leo
      02-03回复undefined
      不懂~~
      02-03
      回复
    • undefined
      undefined
      02-03回复leo
      就是类似这样,哪里能获取到,就写到哪里
      02-03
      回复
    • leo
      leo
      02-03回复undefined
      哦哦 写到回调里~
      02-03
      回复
登录 后发表内容
问题标签