【问题标题】:Method returns HttpStatusCode in angular方法以角度返回 HttpStatusCode
【发布时间】:2023-02-17 02:49:45
【问题描述】:

我想制作一个仅在前一个请求返回 StatusCode 200 时发出另一个请求的方法。我使用的是 angular 15。

我的home.component.ts 看起来像这样,我想todasGuias() 一次只发出另一个请求。

    todasGuias() {
    this.page= 1;
    while (this.page <= this.listaGuias.TotalPages) {
      this.homeService.getGuias( this.year, this.month, this.glosadas, this.page)
      .subscribe((data)=>{
        this.listaGuias = data.Dados[0]
        console.log(this.listaGuias.ResultList);
      })
      this.page++;
    }
  }

我的home.service.ts 看起来像这样:

 public getGuias( year: any, month: any, glosadas: any, page:any): Observable<any> {
    const token = this.token.retornaToken();
    const headers = new HttpHeaders({ Authorization: `Bearer ${token}` });

    return this.http.get(API/list?TpoRelatorio=1
    &SomenteGlosadas=${glosadas}
    &Ano=${year}
    &Mes=${month}
    &Page=${page}
    &Count=0`,{ headers }
    )
  }

有帮助吗?

【问题讨论】:

    标签: angular httprequest http-status-codes angular15


    【解决方案1】:

    您想使用 rxjs 运算符 switchMap 来实现此目的:

    todasGuias() {
        range(1, this.listaGuias.TotalPages).pipe(
           switchMap(page => this.homeService.getGuias( this.year, this.month, this.glosadas, page))
        ).subscribe((data)=>{
            this.listaGuias = data.Dados[0]
            console.log(this.listaGuias.ResultList);
          })
        }
      }
    
    

    这假设您事先知道总页数。 range 生成一个 Observable,每个数字从 1 到 TotalPages。 switchMap 然后将每个数字映射到执行 http 请求的 Observable。由于switchMap 在内部仅保留一个订阅,因此所有请求都是按顺序进行的。如果一个请求失败,Observable 也会失败。

    【讨论】:

    • 它没有用,它只请求第一页
    • 您确定在调用该函数时 this.listaGuias.TotalPages 设置正确吗?只有在调用函数时知道 this.listaGuias.TotalPages 时,这种方法才有效。
    • 是,我确定。示例:如果 TotalPages 为 3,则对第一页进行 3 次请求
    • 所以我又测试了一遍。这个对我有用。我唯一能想到的是你在this.homeService.getGuias的函数参数中写了this.page而不是page
    猜你喜欢
    • 1970-01-01
    • 2020-07-14
    • 2013-10-19
    • 2020-02-01
    • 1970-01-01
    • 2019-12-05
    • 2017-10-07
    • 2018-06-19
    • 2021-09-22
    相关资源
    最近更新 更多