javascript - 似乎无法正确地将函数转换为异步

标签 javascript reactjs

我正在尝试将以下函数转换为 React 中的异步函数(使用 CompressorJS):

const UploadImages = ({ jobInfo, setLoading, getData, accountInfo }) => {
    const [files, setFiles] = useState([]);

    const onDrop = useCallback( uploadedFiles => {
        uploadedFiles.forEach((file) => {
            console.log(file)
            new Compressor(file, {
                quality: 0.5,
                width: 500,
                height: 500,
                resize: "contain",function.
                success(result) {
                    setFiles([...files, result]);
                    console.log(result)
                },
                error(err) {
                    console.log(err.message);
                },
            });
        })
    }, [files]);

    return(<a bunch of stuff here>);
}

使用上面的代码片段时,如果 uploadedFiles 包含多个文件,压缩每张照片并将其添加到状态 ([files, setFiles]).只会添加其中一张图片,其他图片将被遗漏。

我花了几个小时尝试以不同的方式修改这个函数,到目前为止我想出的最好的解决方案如下:

function compressFile(file) {
    return new Promise((resolve, reject) => {
        new Compressor(file, {
            quality: 0.5,
            width: 500,
            height: 500,
            resize: "contain",function.
            success(result) {
                resolve(result) 
            },
            error(err) {
                console.log(err.message);
                reject(err)
            },
        });
    });
}

function compressFiles(files) {
    return new Promise((resolve, reject) => {
        files.forEach((file) => {
            console.log(file)
            compressFile(file)
                .then(compFile => { 
                    console.log(compFile)
                    setFiles([...files, compFile]);
                })
        })
        resolve()
    })
}

const onDrop = useCallback( async acceptedFiles => {
    message.loading('Compressing Images...');
    compressFiles(acceptedFiles)
}, [files]);

不幸的是,这仍然不起作用,我想知道是否有人可以解释我哪里出错了。

最佳答案

这应该有帮助:

const compressFiles = files => Promise.all(
  files.map(file => compressFile(file))
)
  .then(compressedFiles => {
    console.log(compressedFiles);
    setFiles([...files, ...compressedFiles]);
  });

关于javascript - 似乎无法正确地将函数转换为异步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70572869/

相关文章:

javascript - localhost : how to setup XHR-Signaling (connection. openSignalingChannel 未被调用)

javascript - 点击时启用/禁用 JS 功能

javascript - 配置defaultNavigationOption headerBackImage会抛出undefined

javascript - React-Router 算法是如何工作的?

reactjs - react 钩子(Hook) : setState functionality on re-renders

javascript - 日期和 ISO 日期之间的区别

javascript - 我只能捕获 Node.js 脚本的第一行输出

javascript - 如何为 joi-objectid 提供接口(interface)?

javascript - 从数组中删除项目(useState Hook)

javascript - 如何在reactjs中获取dropzone中的所有名称