我需要填写三个具有等级结构的控件:公司,分支机构,员工。 出于用户服务,我当前登录的用户, 然后通过用户的域名我收到他的全部数据作为员工, 然后每个员工的branchId我获得分支对象, 然后我请求所有公司并将控制值设置为 currrent员工,现任分公司和现任分公司。</ p>
我最终得到了嵌套的订阅者树。 我怎样才能避免这种情况并将其重构为更简单?
this.userService.getCurrentlyLoggedInUser().subscribe(
user => {
this.user = user;
this.getEmployee(this.user.domainName).subscribe(
employees => {
if (employees.length === 0) {
this.isLoading = false;
return;
}
this.getBranch(employees[0].branchId).subscribe(
branches => {
if (branches.length === 0) {
this.isLoading = false;
return;
}
this.odata.companies().subscribe(
companies => {
this.setDefaultValues(companies, branches[0], employees[0]);
this.isLoading = false;
},
error => this.isLoading = false
);
},
error => this.isLoading = false
);
},
error => this.isLoading = false
);
},
error => this.isLoading = false
);
答案 0 :(得分:0)
为了避免嵌套的订阅调用,您始终可以使用{{1}从元分支(例如通过某些AJAX调用或其他异步操作从主分支分叉的流)映射回到主干分支。 }。
有关详细信息,请参阅以下代码。请注意,对中继流只有一个订阅呼叫。所有其他流都mergeMap
返回到中继流,因此不需要其他订阅。考虑订阅流来突破RxJS上下文并恢复正常的JS。这只应用于副作用,例如mergeMap
命令。
console.log