云存储中的上传图片File.ID返回值不能全部及时记录入数据库
wx.cloud.init( {env:'env-1g'})
var FilePaths = []
let promiseArr = [];
for (let i = 0;i< this.data.imgList.length ; i++) {
let promise = new Promise((resolve, reject) => {
var randstring = Math.floor(Math.random() * 100).toString() + '.png'
randstring = randstring
wx.cloud.uploadFile({
cloudPath: 'newsImages/' + randstring,
filePath: this.data.imgList[i], // 文件路径
success: res => {
// get resource ID
console.log(res.fileID)
FilePaths[i] = res.fileID
resolve(res);
},
fail: err => {
reject(error);
}
})
})
promiseArr.push(promise)
}
if (this.data.imgList1.length != 0) {
this.setData({
imgList1: this.data.imgList1.concat(FilePaths)
})
} else {
this.setData({
imgList1: FilePaths
})
console.log(this.data.imgList1[1])
}
wx.hideLoading()
/*云数据库记录*/
const db = wx.cloud.database({
env: 'env-'
})
//const diliId = db.collection('enginerInformation')
var data1={_id:"1egwgrr 66",
otherAccountId: "9xgbb2",
pictureFileId1:this.data.imgList1,
userId:"2sdskjhjjj就"}
db.collection('enginerInformation').add({
data:{
data1
} ,
success: function(res) {
// res 是一个对象,其中有 _id 字段标记刚创建的记录的 id
console.log(res)
}
})
上传图片file.id不能及时写入数据库
我也之前也遇到这个问题了,离谱,我一开始是以为数据异步传输的问题,导致我数据没传递进去。
后来发现 是数据库上传 在文件上传 之前就执行了 是uploadFile和callFunction的执行顺序问题
我把云函数的执行,也就是上传数据库操作 放在complete里就可以
wx.cloud.uploadFile({
cloudPath: imageName, // 对象存储路径,根路径直接填文件名,文件夹例子 test/文件名,不要 / 开头
filePath: item.value.tempFilePath, // 微信本地文件,通过选择图片,聊天文件等接口获取
config: {
env: '*******' // 微信云托管环境ID
},
success: res => {
// 上传成功,替换图片或者视频路径
item.value.fileID = res.fileID
},
fail: error => console.log(error),
complete: () => {
// 调用云函数存储当前的内容content
wx.cloud.callFunction({
name: 'upload',
data: {
content: this.data.content
},
success: (res) => {
console.log(res, this.data.content)
}
})
console.log("上传结束")
}
})
我的代码,大家可以借鉴一下,如果有什么不对,欢迎指教