大家好,又是我拎包哥,今天我们来实现在云开发中批量上传图片。
经过Stephen哥的指正,我改用了Promise.all的方法来达到目的。
Promise.all的作用就是等待所包含的promise函数结束后再执行下一步逻辑,非常方便好用!
const db = wx.cloud.database()
const test = db.collection('test')
Page({
onLoad() {
this.imgList = []
wx.chooseImage({
success: (res) => {
this.TFP = res.tempFilePaths
}
})
},
btn() {
let promiseMethod = new Array(this.TFP.length)
for (let i = 0; i < this.TFP.length; i++) {
promiseMethod[i] = wx.cloud.uploadFile({
cloudPath: 'img' + i + '.png',
filePath: this.TFP[i]
}).then(res => {
this.imgList.push(res.fileID)
})
}
Promise.all([...promiseMethod]).then(() => {
test.add({
data: {
imgList: this.imgList
}
})
})
}
})
--------------------------------------我是分割线--------------------------------------
async await
要点:
- ctrl c + ctrl v
- 这里用了await阻塞在wx.cloud.uploadFile前面,避免还没上传完图片就往数据库插入数组。减少了then里的代码,美观逼格高。嘻嘻嘻。
- await wx.cloud.uploadFile不能放在wx.chooseImage里,如果可以的话,请告诉我怎么做,谢谢!
欢迎交流,指出错误,我立刻修改么么哒。
标准版
const db = wx.cloud.database()
const test = db.collection('test')
Page({
onLoad() {
this.imgList = []
wx.chooseImage({
success: (res) => {
this.TFP = res.tempFilePaths
}
})
},
async btn() {
this.imgList = []
console.log(this.TFP)
for (let i = 0; i < this.TFP.length; i++) {
await wx.cloud.uploadFile({
cloudPath: 'img' + i + '.png',
filePath: this.TFP[i]
}).then(res => {
this.imgList.push(res.fileID)
})
}
test.add({
data: {
imgList: this.imgList
}
})
}
})
新手最爱一锅炖版(不推荐)
为什么不推荐呢,因为选择图片并不意味着要上传图片,用户还没进行最终的确定操作(不过可以用来了解async await)。
onLoad() {
this.imgList = []
wx.chooseImage({
success: async res => {
this.TFP = res.tempFilePaths
for (let i = 0; i < this.TFP.length; i++) {
await wx.cloud.uploadFile({
cloudPath: 'img' + i + '.png',
filePath: this.TFP[i]
}).then(res => {
this.imgList.push(res.fileID)
})
}
test.add({
data: {
imgList: this.imgList
}
})
}
})
}
==========================end==========================
看后有收获,非常感谢分享。