返回带有承诺的函数值

时间:2019-12-22 12:18:44

标签: javascript angular typescript

我有此功能,可以将文件转换为显示文件的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会向我显示undefined

当我登录此支架时:

    reader.onload = (e) => {
        localAddress = e.target['result'];
    };

它显示了base64的值,但是当我在localAddress之外登录bracket时,它显示了undefined

DEMO

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

1 个答案:

答案 0 :(得分:2)

您可以通过Promises或callback进行处理。

-使用回叫

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;
});

您也可以将Observable设为可观察-您可以在此处查看示例-https://jasonwatmore.com/post/2018/06/25/angular-6-communicating-between-components-with-observable-subject