我想知道如何解决以下问题。我有一个上传组件,可以接受多个文件。因此,onDrop
会向我提供accepted
和rejected
个文件(基于扩展名和大小)。
从那些accepted
我需要弄清楚它们是否具有正确的尺寸,并且我想使用browser-image-size
package。
这个包返回一个promise,但正如你在下面看到的,我需要在提供的accepted
参数中检查每个文件。我试过以下但是你可以看到这总是返回一个emty数组并且未定义。
如何解决此问题?
const checkDimensions = (file) => {
return Promise.resolve(file);
}
const handleFiles = (accepted, rejected) => {
const acceptedFiles = [];
const errors = [];
accepted.map(file =>
checkDimensions(file)
.catch((error) => errors.push(error))
.then((file) => acceptedFiles.push(file))
);
// both log empty array
console.log(acceptedFiles);
console.log(errors);
}
// Logs undefined
console.log(handleFiles(['test file']))

答案 0 :(得分:1)
您的控制台日志会在checkDimensions
有机会完成它之前执行。
const handleFiles = (accepted, rejected) => {
const acceptedFiles = [];
const errors = [];
accepted.map(file => checkDimensions(file)
.then(file => acceptedFiles.push(file), error => errors.push(error))
.then(() => {
console.log(acceptedFiles);
console.log(errors);
});
);
}
then
有一个可选的第二个参数。使用2个参数的catch
后跟then
与then
之间的差异非常微妙:如果checkDimensions
决定拒绝文件,acceptedFiles.push(file)
仍会被执行。