微信小程序云开发上传图片成功了,插入数据库的url是空的
问题:
创建圈子时,上传封面,有时创建成功之后封面上传到云存储中,插入到云数据库中的圈子数据中的封面url时空的,导致没有封面
原因:我之前写的是读取图片后就上传,上传成功后返回url,再拿到这个url传给创建圈子的云函数,由于上传图片需要时间较长,云函数是异步执行的,所以图片没上传完,没有返回url就调用了创建圈子的云函数,导致数据库中的url为空,图片却能成功上传到云存储中。
解决:在上传图片成功的回调函数中调用创建圈子的云函数,这样就能保证拿到返回的url之后再创建圈子了。
console.log('创建圈子');
console.log(this.data);
//先上传图片,再创建圈子,否则会出现图片未上传完就创建了圈子,导致封面为空
wx.cloud.uploadFile({
cloudPath: 'circleCover/' + Date.now() + ".jpg",
filePath: this.data.image[0].url
}).then(res => {
// console.log('上传图片成功', res);
this.setData({
fileId: res.fileID
})
// 校验完成,调用云函数创建圈子
wx.cloud.callFunction({
name: 'createCircle',
data: {
circle_name: this.data.circleInfo.circleName,
circle_desc: this.data.circleInfo.circleDesc,
image: this.data.fileId,
join_people: 1, //圈子参加人数
clock_count: 0, //打卡记录数
},
}).then(res => {
// console.log('云函数调用成功');
// console.log(res);
wx.showToast({
title: '创建成功',
})
utils.sleep(500)
wx.navigateBack({
delta: 0,
})
}).catch(res => {
console.log('云函数调用失败');
console.log(res);
})
}).catch(err => {
console.log('上传图片失败');
console.log(err);
})