v.pics.forEach((u, i) => { if (u.split('/')[0] == 'cloud:') { } else { wx.getFileSystemManager().getFileInfo({ filePath: u, success: function (res) { if (res.size > 200 * 1024) { picCursor.push(i) tmpPromise.push(wx.compressImage({ src: u, quality: 30, }).then(res => { return wx.cloud.uploadFile({ cloudPath: 'usersproducts/' + upID + Date.now() + (i + '.png'), filePath: res.tempFilePath, }) })) } else { picCursor.push(i) tmpPromise.push(wx.cloud.uploadFile({ cloudPath: 'usersproducts/' + upID + Date.now() + (i + '.png'), filePath: u, })) } } }) } })这段代码存在问题,图片压缩后,应该上传图片的,实际运行时却没有上传图片
时间: 2024-02-10 21:03:33 浏览: 122
这段代码中存在异步操作,导致上传图片的操作没有等到压缩完成就执行了,可以使用 Promise.all() 方法来解决这个问题。具体操作可以将所有的压缩操作和上传操作存储在一个 Promise 数组中,然后使用 Promise.all() 方法等待所有 Promise 完成后再执行上传操作。可以参考以下代码:
```
let promises = [];
v.pics.forEach((u, i) => {
if (u.split('/')[0] == 'cloud:') {
} else {
wx.getFileSystemManager().getFileInfo({
filePath: u,
success: function (res) {
if (res.size > 200 * 1024) {
picCursor.push(i)
let promise = wx.compressImage({
src: u,
quality: 30,
}).then(res => {
return wx.cloud.uploadFile({
cloudPath: 'usersproducts/' + upID + Date.now() + (i + '.png'),
filePath: res.tempFilePath,
})
})
promises.push(promise);
} else {
picCursor.push(i)
let promise = wx.cloud.uploadFile({
cloudPath: 'usersproducts/' + upID + Date.now() + (i + '.png'),
filePath: u,
})
promises.push(promise);
}
}
})
}
})
Promise.all(promises).then(res => {
// 上传图片的操作
})
```
这样就可以确保所有压缩操作完成后再执行上传操作,避免了异步操作导致的问题。
阅读全文