在微信小程序中遇到了异步转同步的问题,代码如下:
checkUserState(){
var _this=this;
wx.cloud.callFunction({
name: 'getUserOpenInfo',
success: async res=>{
var userOpenId=res.result.event.userInfo.openId;
console.log("已获取到用户信息:"+JSON.stringify(res.result.event.userInfo));
_this.data.userInfo.openId=userOpenId;
if(await Util.userExit(userOpenId)){
_this.data.messageInfo=Util.pullMessageInfo(userOpenId);
}
else{
await Util.addUser(_this.data.userInfo);
}
console.log("我是分割线");
_this.setData({
userInfo:_this.data.userInfo,
messageInfo:_this.data.messageInfo,
pullMessageComplete:true,
})
},
})
},
我大概解释一下代码:
遇到的问题:获取到openid后,在success回调中应当先执行Util.userExit(userOpenId)
方法判断用户在数据库中是否存在,然后执行Util.pullMessageInfo
/Util.addUser
。最后执行_this.setData
。
但是现在的情况时,加上await和不加没什么区别,方法的执行是乱的。
怎么才能让上述异步方法转同步呢,等待异步方法执行完毕呢。
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…