微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 举报,一经查实,本站将立刻删除。