如何链接可变数量的可观察量?
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
});
});
});
- angular: 12.0.5
- 打字稿:4.2.3
- rxjs: 6.6.0
你可以这样写一个递归函数:
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))
);
我对 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
});
});
});
- angular: 12.0.5
- 打字稿:4.2.3
- rxjs: 6.6.0
你可以这样写一个递归函数:
getNodeById(id) {
return this.myService
.getNodeById(id)
.pipe(switchMap((x) => (x.parent_id ? this.getNodeById(x.parent_id) : of(x))));
}
您可以创建一个自定义 Rx.js 运算符,它基本上在 switchMap
中调用所需的 APItype 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))
);