onLoad: async function(options){ // 二维码生成器代码 let that = this; wx.getSystemInfo({ success: function (res) { that.setData({ height: res.screenHeight }) } }) // 二维码生成器代码 this.openid = await app.getOpenid() this.usersdatas = await lib.getUsersDatas(this.openid) await db.collection('qrcodes').doc(this.usersdatas.qrcodesid).get().then(res => { console.log(res) this.qrcodes = res.data }) await this.setData({ ...this.usersdatas, //qrcodes: this.qrcodes, isOpenThreeParty: this.qrcodes.isOpenThreeParty || '' , threepartycreators: this.qrcodes.threepartycreators || '' , threepartymobile: this.qrcodes.threepartymobile || '' , threepartypartName: this.qrcodes.threepartypartName|| '' }) this.automaticSetUp() },这段代码存在哪些问题,请修复及优化这段代码
时间: 2024-01-11 21:01:59 浏览: 139
微信小程序报错:this.setData is not a function的解决办法
存在以下问题:
1. 使用了多个异步操作,但是没有使用 Promise.all() 或者 async/await 来确保所有异步操作完成后再进行下一步操作。
2. 在获取用户数据和二维码数据时使用了 await,但是在 setData() 方法中直接使用 this.qrcodes,而不是等待二维码数据获取完成后再使用。
3. 在 setData() 方法中使用了对象展开运算符,但是其中包含的属性并没有在 data 中声明过。
下面是修复及优化后的代码:
```
onLoad: async function(options) {
try {
const res = await wx.getSystemInfo()
this.setData({
height: res.screenHeight
})
const openid = await app.getOpenid()
const usersdatas = await lib.getUsersDatas(openid)
const qrcodeRes = await db.collection('qrcodes').doc(usersdatas.qrcodesid).get()
const qrcodes = qrcodeRes.data
const data = {
openid,
usersdatas,
isOpenThreeParty: qrcodes.isOpenThreeParty || '',
threepartycreators: qrcodes.threepartycreators || '',
threepartymobile: qrcodes.threepartymobile || '',
threepartypartName: qrcodes.threepartypartName || '',
}
this.setData(data)
this.automaticSetUp()
} catch (error) {
console.error(error)
}
},
```
阅读全文