繁体   English   中英

NestJS HttpService 同时调用多个端点

[英]NestJS HttpService Call Multiple Endpoints Simultaneously

我正在使用 NestJS HttpModule为一个端点发出 GET 请求。 代码有点像这样:

@Injectable
export class AnimalService {
  constructor(private httpService: HttpService){}
  
  getAnimalData(variant: string): Observable<AxiosResponse<Animal>> {
    return this.httpService
      .get(`http://animal.test/${variant}`)
      .pipe(map((response) => response.data));
  }
}

现在我想创建一个同时调用多个端点的方法。

getAllAnimalsData() {
  // const variants = ['birds', 'cats', 'dogs'];
  // call 
  //   http://animal.test/birds
  //   http://animal.test/cats
  //   http://animal.test/dogs
  // simultaneously
  // and process the response data
}

如何使用 NestJS HttpModule实现这一点? 我如何处理每个结果? 如果出现部分错误(例如 3 个请求中的 1 个有错误),我该如何处理?

如果你想同时发出多个 http 请求,你可以使用 RxJS forkJoin操作符。 我还为每个 Observable 添加了一个catchError以便任何错误都将传递给订阅回调。 当所有 Observable 完成时,订阅回调会触发。

getAllAnimalsData() {
  const variants = ['birds', 'cats', 'dogs'];
  
  forkJoin(
    variants.map(v => 
      getAnimalData(v).pipe(catchError(e => of(e)))
    )
  )
  .subscribe(([r1, r2, r3]) => /* ... */)
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM