v.pics.forEach((u, i) => { if (u.split('/')[0] == 'cloud:') {} else { picCursor.push(i) tmpPromise.push( wx.getFileInfo({ filePath: u, success: function(res) { if (res.size > 200 * 1024) { 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) wx.cloud.uploadFile({ cloudPath: 'usersproducts/' + upID + Date.now() + (i + '.png'), filePath: u, }) } }, fail: function(res) { console.log('获取文件信息失败') } }) ) } })请指出这段代码存在哪些问题,请修复问题,把正确的带啊吗发给我
时间: 2024-02-07 08:03:21 浏览: 66
这段代码存在以下问题:
1. `tmpPromise` 数组中的 Promise 并没有被等待执行,而是直接被推入了数组中,需要使用 `Promise.all()` 等待所有 Promise 执行完毕。
2. `wx.compressImage()` 和 `wx.cloud.uploadFile()` 方法都是异步的,需要使用 `async/await` 或者 `.then()` 对它们进行串联执行。
3. `tmpPromise` 数组中的元素并没有被处理,需要对它们进行处理,例如可以使用 `Promise.all()` 处理所有的 Promise,然后使用 `picCursor` 数组过滤掉处理成功的图片。
修复后的代码如下:
```
const promises = v.pics.map(async (u, i) => {
if (u.split('/')[0] == 'cloud:') {
return Promise.resolve();
} else {
try {
const res = await wx.getFileInfo({
filePath: u
});
if (res.size > 200 * 1024) {
const compressed = await wx.compressImage({
src: u,
quality: 30,
});
return wx.cloud.uploadFile({
cloudPath: 'usersproducts/' + upID + Date.now() + (i + '.png'),
filePath: compressed.tempFilePath,
});
} else {
return wx.cloud.uploadFile({
cloudPath: 'usersproducts/' + upID + Date.now() + (i + '.png'),
filePath: u,
});
}
} catch (e) {
console.error('获取文件信息失败', e);
return Promise.resolve();
}
}
});
const results = await Promise.all(promises);
const picCursor = results.map((result, index) => {
if (result && result.fileID) {
return index;
}
return -1;
}).filter(index => index >= 0);
```
阅读全文