Typescript中的文件头-如何等待onloadend完成以继续该过程

问题描述

我正在onloadend内调用API,但是我无法获得响应,因为我的过程在调用完成之前就继续了:

async function InsertDataProjects(file3D: File,fileThumb: File,groupCod: string,projectName: string) {

    const uploadobj = async (file: File,projectName: string,objName: string,type: string) => {
        let reader = new FileReader();

        reader.readAsDataURL(file);
        reader.onloadend = async () => {
            let base64 = reader.result;
            let payload = {
                name: projectName + objName,type: type,file: base64
            }
            await s3.upload(payload).then((resp) => {
                console.log(resp);

            });
        }
}
try {
    await uploadobj(file3D,projectName,'/3d.gltf','base64_2');

} catch (error) {

}

我试图在reader.onloadend之前声明一个变量,并在s3.upload响应中分配它,但是 这是不可能的,因为该过程在结束onloadend调用之前会继续

示例:

const uploadobj = async (file: File,type: string) => {
    let reader = new FileReader();

    let response: any;
    reader.readAsDataURL(file);
    reader.onloadend = async () => {
        let base64 = reader.result;
        let payload = {
            name: projectName + objName,file: base64
        }
        await s3.upload(payload).then((resp) => {
            response = resp;
        });
    }

    return response;
}

我还尝试在onloadend之后调用API,但由于我的有效载荷未定义,它也出错了。 示例:

const uploadobj = async (file: File,type: string) => {
    let reader = new FileReader();
    let payload: any;
    let response: any;
    reader.readAsDataURL(file);
    reader.onloadend = async () => {
        let base64 = reader.result;
        payload = {
            name: projectName + objName,file: base64
        }
    }
    // payload is undefined here
    await s3.upload(payload).then((resp) => {
        response = resp;
    });

    return response;
}

如何将s3.upload的响应返回给InsertDataProjects?

let resp = await uploadobj(file3D,'base64_2');

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)