如何链接可变数量的可观察量?

How to chain variable number of observables?

我对 Angular 和 Observables 很陌生。我想将服务调用链接一定次数。有没有使用 Observables 的简单方法? (有点像 但具有通用性)。

this.myService.getNodeById(res.parent_id).subscribe(res => {
  this.myService.getNodeById(res.parent_id).subscribe(res => {
     this.myService.getNodeById(res.parent_id).subscribe(res => {
        // while res.parents_id exists
     });
  });
});

你可以这样写一个递归函数:

getNodeById(id) {
  return this.myService
    .getNodeById(id)
    .pipe(switchMap((x) => (x.parent_id ? this.getNodeById(x.parent_id) : of(x))));
}

您可以创建一个自定义 Rx.js 运算符,它基本上在 switchMap

中调用所需的 API
type GetNodeFn<TNode = any, TResponse = any> = (
  res: TNode
) => Observable<TResponse>;

// custom getNode operator
function getNode<TNode>(nodeFn: GetNodeFn) {
  return (observable: Observable<TNode>) =>
    observable.pipe(switchMap((res) => nodeFn(res)));
}

this.myService.getNodeById(res.parent_id).pipe(
  getNode((res) => this.myService.getNodeById(res.parent_id)),
  getNode((res) => this.myService.getNodeById(res.parent_id))
);