Angular2:使用Promise

时间:2017-04-12 11:21:30

标签: angular typescript promise settimeout filereader

在我看来,有一个与控制器的一个功能链接的输入文件

<input type="file" style="display: none;" (change)="importXML($event)">

此函数调用服务中的函数,该服务假设将我的xml文件转换为json

importXML(event): void {
        const obj = this.myService.convertXML2Json(event.target);
}

在服务功能中,XML文件在FileReader中读取然后转换 到文件阅读器的onloadend部分的xml

convertXML2Json(event): any {
    const file = event.files[0];
    const fr = new FileReader();
    fr.onloadend = e => xmltoJsonFunction(fr.result);
    fr.readAsText(file)
}

如何在onloadend中检索转换后的json结果,以便在Angular控制器中使用它,特别是使用Promise?或者我应该使用setTimeout?

2 个答案:

答案 0 :(得分:0)

您的结果不在fr对象内。回调函数中的参数e具有读取文件的结果:

fr.onloadevent = e => xmltoJsonFunction(e);

答案 1 :(得分:0)

实际上,如果我只在控制器部分编码,我发现了一个修复:

  public XMLParsed;

  importXML(event): void {
    const file = event.target.files[0];
    const fr = new FileReader();
    fr.onloadend = (e: any) => {
        this.XMLParsed = xmlToJSON(e.target.result);
    };
    fr.readAsText(file);