【问题标题】:forkjoin deprecated in Angular 10 alternativeAngular 10 替代方案中不推荐使用 forkjoin
【发布时间】:2021-03-28 21:30:39
【问题描述】:

下面是我的代码:

 async getBranchDetails()  ----component  method

  {
    let banks = this.bankDataService.getBanks();
    let branchTypes = this.branchDataService.getBranchTypes();

    forkJoin([banks,branchTypes]).subscribe(results => {
              this.setFormBankData(results[0]);
              this.setFormBranchTypeData(results[1]);
            });
  }

----服务

 async getBanks(): Promise<IBankResponse[]> {
        return await  this.httpClient.get<Result<IBankResponse[]>>(baseUrl + '/Bank/GetBanks')
        .pipe(map( res => res.data)).toPromise();
    }

分叉连接显示已弃用。 async/await 有其他用途吗?谢谢。

编辑:我不知道它是否正确,但使用了 asyn/await ..我的最终代码如下

  async getBranchDetails()

  {
    let banks =  await this.bankDataService.getBanks();
    let branchTypes= await this.branchDataService.getBranchTypes();
    this.setFormBankData(banks);
    this.setFormBranchTypeData(branchTypes);
   
  }

【问题讨论】:

  • forkJoin 仅适用于 Observables,但您的函数似乎返回 Promises
  • 您可以将 flatMap 用于可观察请求
  • 如果你以后想节省时间,不要在 Angular 中使用 Promise,@JSONDerulo 是正确的。
  • @json 实际上已经编写了服务,它返回了 promises..what 是加入的最佳选择 ..thanks
  • @Ajt 看看我的回答...

标签: angular typescript promise rxjs


【解决方案1】:

你正在混合 Observables 和 Promise。要么使用 Observables 和 RxJS,要么坚持 Promises。

Observables 方法(推荐):

getBanks(): Observable<IBankResponse[]> {
   return this.httpClient.get(baseUrl + '/Bank/GetBanks')
     .pipe(map( res => res.data));
}
let banks = this.bankDataService.getBanks();
let branchTypes = this.branchDataService.getBranchTypes();

forkJoin([banks,branchTypes]).subscribe(results => {
  this.setFormBankData(results[0]);
  this.setFormBranchTypeData(results[1]);
});

承诺方法

getBanks(): Promise<IBankResponse[]> {
  return this.httpClient.get<Result<IBankResponse[]>>(baseUrl + '/Bank/GetBanks')
    .pipe(map( res => res.data)).toPromise();
}

使用 Promises 时,您可以使用 Promise.all 等待所有请求完成:

let banks = this.bankDataService.getBanks();
let branchTypes = this.branchDataService.getBranchTypes();

Promise.all([banks,branchTypes]).then(results => {
  this.setFormBankData(results[0]);
  this.setFormBranchTypeData(results[1]);
});

【讨论】:

  • 非常感谢..在 observable 中的最后一个查询 / 承诺 2 个不同的请求 / 只有一个(请求发送到服务器?
  • 我已经更新了有问题的最终代码。如果有错误请告诉我
  • @Ajt 您的最终代码也很好。但请注意,请求将按顺序而不是同时发出。如果你使用我的代码示例,两个请求将同时发出,通常会快一点。
猜你喜欢
  • 1970-01-01
  • 2021-04-26
  • 2021-10-29
  • 2021-10-23
  • 1970-01-01
  • 2018-03-06
  • 2022-01-20
  • 2022-09-25
  • 2012-03-03
相关资源
最近更新 更多