Javascript 带承诺的返回函数值

Javascript 带承诺的返回函数值,javascript,angular,typescript,Javascript,Angular,Typescript,我有一个函数ror将文件转换为base64以显示文件 ConvertFileToAddress(event): string { let localAddress: any; const reader = new FileReader(); reader.readAsDataURL(event.target['files'][0]); reader.onload = (e) => { localAddress = e.target['re

我有一个函数ror将文件转换为base64以显示文件

 ConvertFileToAddress(event): string {

    let localAddress: any;
    const reader = new FileReader();
    reader.readAsDataURL(event.target['files'][0]);
    reader.onload = (e) => {
        localAddress = e.target['result'];
    };
    return localAddress;
}
不要使用这样的组件:

this.coverSrc=this.localization.ConvertFileToAddress(event);
但是当登录到控制台时,
this.coverSrc
会显示未定义的

当我登录到此括号中时:

    reader.onload = (e) => {
        localAddress = e.target['result'];
    };
它显示
base64的值
,但当我在
括号外记录
本地地址
时,它会显示
未定义


如何返回函数值并在其他组件中使用它?

您可以通过承诺或回调来处理

--使用回拨

ConvertFileToAddress(event, callback): string {
    const reader = new FileReader();
    reader.readAsDataURL(event.target['files'][0]);
    reader.onload = callback;
}

this.localization.ConvertFileToAddress(event, (e) => {
     this.coverSrc = e.target['result'];
});
--使用承诺

ConvertFileToAddress(event): string {

    return new Promise((resolve, reject) {

        const reader = new FileReader();
        reader.readAsDataURL(event.target['files'][0]);
        reader.onload = (e) => {
             resolve(e.target['result']);
        };
    });
}

this.localization.ConvertFileToAddress(event).then((data) => {

   this.coverSrc = data;
});

你也可以让可观察性成为现实——你可以在这里检查样本——

你可以通过承诺或回调来处理

--使用回拨

ConvertFileToAddress(event, callback): string {
    const reader = new FileReader();
    reader.readAsDataURL(event.target['files'][0]);
    reader.onload = callback;
}

this.localization.ConvertFileToAddress(event, (e) => {
     this.coverSrc = e.target['result'];
});
--使用承诺

ConvertFileToAddress(event): string {

    return new Promise((resolve, reject) {

        const reader = new FileReader();
        reader.readAsDataURL(event.target['files'][0]);
        reader.onload = (e) => {
             resolve(e.target['result']);
        };
    });
}

this.localization.ConvertFileToAddress(event).then((data) => {

   this.coverSrc = data;
});

您也可以制作可观察的-您在这里检查样本-

您可以创建stackblitz演示来重现问题吗?您可以创建stackblitz演示来重现问题吗?