【发布时间】:2021-08-31 23:26:07
【问题描述】:
我正在与react dropzone 和react image file resizer 合作,以便在图片下拉时上传多张调整大小的图片。
React Dropzone 可以正常工作(上传、显示缩略图),无需 React 图像文件调整器。
但是将两个模块组合在一起,当图像下降时,它会很好地调整大小,但不知何故不会更新状态。
这似乎是由于使用了异步,以错误的方式等待,
因为 finally 子句中的 console.log 比 try - await 子句中的 console.log 先出现。
这是有问题的代码。
这是反应图像文件调整器代码:
const resizeFile = (file) =>
new Promise((resolve) => {
Resizer.imageFileResizer(
file,
300,
300,
"JPEG",
80,
0,
(uri) => {
resolve(uri);
},
"file"
);
});
这是 react dropzone 中的 onDrop 方法:
/// onDrop method in react dropzone
const onDrop = async (images) => {
let uploadBranchImages = [];
try {
await images.map((image) => {
resizeFile(image).then((resizedImage) => {
console.log(resizedImage);
Object.assign(resizedImage, {
preview: URL.createObjectURL(resizedImage),
});
uploadBranchImages.push(resizedImage);
});
});
} catch (err) {
console.log(err);
} finally {
console.log(uploadBranchImages);
let tempBranchImages = [...state.branchImages, ...uploadBranchImages];
console.log(tempBranchImages);
setState({
...state,
branchImages: tempBranchImages,
});
}
};
在这段代码中,finally子句中uploadBranch的日志首先出现,然后tempBranchImages的日志出现,而try子句中resizedImage的日志最后出现。
另外,当我将 URL 放在 chrome 地址栏中时,调整大小的图像显示效果很好。
这里是日志的捕获: capture_of_logs
所以问题是......为什么这些代码不能按顺序工作?
因此,图片在上传后不会显示在拖放区中。
如需更多信息,我将附上不带反应图像文件大小调整器的日志。 它与上面的数组预览中的捕获不同
( [ ] 与 [文件] )
这里是日志: capture_of_logs_without_resize
任何建议将不胜感激..
【问题讨论】:
标签: javascript reactjs async-await image-resizing react-dropzone