首页 > 解决方案 > 返回一个带有 Observable<{string; 响应的数组 数字; 字符串;}[]>

问题描述

我用 Angular 9 开发了一个应用程序,我想用我的响应返回一个数组。在我的服务类中,我有这个方法,

 getReport(startDate: string, endDate: string) {
    return this.http.get<ReportReport>(
      `https://localhost:44354/report?startDate=${startDate}&endDate=${endDate}`,
      this.httpOptions);
}

我的对象返回是报告

export interface Report {
  range: string;
  opens: number;
  closes: number;
}

我希望 getReport 返回这样的数组。

 list= [
    {
      name: 'Opens',
      value: Report.opens,
      color: 'green',
    },
    {
      name: 'Closes',
      value: Report.closes,
      color: 'red',
    }
]

所以我尝试了一个可观察的订阅,例如:

 getReport(startDate: string, endDate: string) {
     return this.http.get<ReportReport>(
      `https://localhost:44354/report?startDate=${startDate}&endDate=${endDate}`,
      this.httpOptions).subscribe(result => { return [{
        name: 'Opens',
        value: result.opens,
        color: 'green',
      },{

        name: 'Closes',
        value: result.closes,
        color: 'red',
      }]
    });
}

使用这种方法,我有订阅回报。

和一张地图

 getReport(startDate: string, endDate: string) {
     return this.http.get<ReportReport>(
      `https://localhost:44354/report?startDate=${startDate}&endDate=${endDate}`,
      this.httpOptions).pipe(map(result => { return [{
        name: 'Opens',
        value: result.opens,
        color: 'green',
      },{

        name: 'Closes',
        value: result.closes,
        color: 'red',
      }]
    }));
}

但它不适用于订阅和地图。

使用这种方法,我有一个 Observable<{name: string; value: number color: string;}[]> 用于返回我只是想要这个返回 -> {name: string; 值:数字颜色:字符串;}[] 不可观察

那么有可能这样做吗?或/和我怎样才能做到这一点?

谢谢您的帮助

标签: javascriptangulartypescript

解决方案


我尝试使用带有承诺的 async/await

  async getReport(startDate: string, endDate: string){
    return await this.http
      .get<Report>(
        `https://localhost:44354/report?startDate=${startDate}&endDate=${endDate}`,
        this.httpOptions
      )
      .toPromise();
  }
getReports(startDate: string, endDate: string) {
    this.getReport('2020-03-20', '2020-03-26').then(response => {
      let lists= [
       {
        name: 'Opens',
        value: response .opens,
        color: 'green',
      },
        {
        name: 'Opens',
        value: response .opens,
        color: 'green',
      }];
    });

它可以在承诺之外使用列表吗?例如,如果我想从我的方法 getReport 中返回列表?


推荐阅读