我正在学习Angular,遇到了我喜欢但仍然不完全了解的Observable。所以我有一个Observable,它需要完成一个Observable才能继续。
我有一些序列问题,因为它们是独立的,因此我需要嵌套它们,以确保第二个Observable等待第一个的完成。 我想知道是否有更好的方法来完成我的工作,因为似乎有些混乱。我可能需要在此结构中添加另一个嵌套的可观察对象。
这是我的代码示例...
this.permissionService.build().subscribe( p =>{
this.Headers = p;
this.accessService.buildTitlesWithMenus().subscribe( q => {
this.treeNodes = this.accessService.buildTreeTable(q);
});
});
答案 0 :(得分:0)
this.permissionService.build().pipe(
tap(p => this.Headers = p),
switchMap(p => this.accessService.buildTitlesWithMenus()),
).subscribe(q => this.treeNodes = this.accessService.buildTreeTable(q));
这是正确的方法。
如果您有任何疑问,请随时提问!
答案 1 :(得分:0)
这是正常的方式。而您则使一切正确。但是,如果要结构化代码。并使其更具可读性,您可以使用以下几种方法:
rxjs
的{{3}}方法接受
ObservableInput
的数组或的字典对象ObservableInput
并返回一个发出数组的Observable
值与传递的数组或字典的顺序完全相同 与传递的字典具有相同形状的值。
private buildPermissionService() {
return this.permissionService.build();
}
private buildTitlesWithMenus() {
return this.accessService.buildTitlesWithMenus();
}
private buildMenuAndPermissions() {
return forkJoin(
this.buildPermissionService(),
this.buildTitlesWithMenus()).subscribe(result => {
this.Headers = result[0];
this.treeNodes = this.accessService.buildTreeTable(result[1]);
});
}
rxjs
的{{3}}方法将每个源值投影到一个Observable中,该值将合并到 输出可观察到的,仅发出最近的值 预计可观察。
this.permissionService.build().pipe(
tap(p => this.Headers = p),
switchMap(p => this.accessService.buildTitlesWithMenus()),
).subscribe(q => this.treeNodes = this.accessService.buildTreeTable(q));
您可以在文档中找到更多方法。例如,如果您不仅需要获得结果,而且还需要将其组合起来,则可以使用forkJoin或switchMap。