是否有任何解决方法可以从 readCsv() 方法返回 res 的值而不是 undefined?

is there any workaround for returning the value of res from readCsv() method instead of undefined?

场景是我有文件上传器,它在有文件后接受 .json,.csv 文件,如果我点击上传按钮,然后 homeComponent 调用服务 dataparser,它有两个功能readJson readCsv, 和 readcsv
功能 return 观察另一个 returns 数组,这很简单我必须调用两个函数
在 if else 上处理 HomeComponent 上的订阅者和数组 但是等等,我不想在组件级别处理这些复杂性,所以我只想 return 主页组件页面上的数据数组,所以,我已经在服务中处理了这些,但可以观察到创建问题

**dataparser.service.ts having threee methods**

async uploadDocument() {
const type = this.checkType();
if(!type) return;
 let m = type == "csv" ?  await this.readCsv() : await this.readJson();
 if(m){
  console.log(m);
  return m;
}
console.log(" m is empty");
} 

readJson 方法是 returning 对象数组,如果文件类型是 json,m 不为空,它 returning m 到 homeComponent 上的调用函数

private  readJson() {
    return new Promise((resolve,reject) =>{
      const fr: FileReader = new FileReader();
      fr.readAsText(this.file);
      fr.onerror = () =>{
        fr.abort();
        reject(new DOMException("Problem parsing input  file."));
      }
      fr.onload = () =>{
        resolve(JSON.parse(fr.result as string));  
      }})
  } 

readCsv 方法是 returning empty varaiable(res) due to subscribe method 是否有任何变通方法,通过它我可以从 readCsv 函数中获取 res 阀并且 我不想订阅这个任何地方的方法,因为我不想在 homeComponent 页面上处理这两个结果,那么我怎样才能从 readCsv

中获取这个 res varaible 的值
private async readCsv() {
    let res: any[];
     this.ngxCsvParser.parse(this.file, { header: this.header, delimiter: ',' })
    .pipe().subscribe((result: Array<any>) => {
 
      // console.log('Result', result);
       res = result;
    }, (error: NgxCSVParserError) => {
      console.log('Error', error);
    });
    if(res)
    {
      console.log(" i got m");
      return res;
    } 
  }

您不能直接等待 Observables,但是,您可以 await Promise。您可以简单地在 observables 订阅上使用 .toPromise() 方法。考虑以下: const date = await dateSubscription.toPromise();

private async readCsv() {
    let res: any[];
   res= await this.ngxCsvParser.
     parse(this.file, { header: this.header, delimiter: ',' }).toPromise()
    if(res)
    {
      console.log(" i got m");
      return res;
    } 
  }