3つのコントロールを企業、支店、従業員という階層構造で入力する必要があります。 私は現在ユーザーにログインしています ユーザーのドメイン名で私は従業員として の全データを受け取り、次に従業員のブランチIDを取得しました 私はすべての企業を要求し、制御値を 現住所の従業員、現在のブランチ、および現在のブランチの会社。ネストされたオブザーバブを避ける
私は加入者のネストされたツリーで終わる。 これを避け、より簡単にリファクタリングするにはどうすればよいですか?こうした使用してトランク枝に、いくつかのAJAXコールまたは他のいくつかの非同期操作を介してメインブランチからフォークされたストリームとして、いつでも戻ってメタブランチからマッピングすることができ、ネストされたサブスクライブのコールを、避けるために
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
);
違いは、後続の各コールのために、私は、以前の1からの情報を使用する必要があるということです。すなわち、まずuserを取得し、次にuser.organizationIdによって組織を要求します。あなたの例では、いつも同じuserIdです。 – avj
@avjどちらの場合でも 'user.userId'を使用しますが、それ以降のすべての呼び出しで他の値も使用できます。拡張例については、https://jsbin.com/bakajuh/edit?js,consoleを参照してください。 – dotcs
はい、flatMapが最後に機能しました。 http://stackoverflow.com/questions/34104638/how-to-chain-http-calls-in-angular2には単純な例がありますが、私はこれを使用しました。 – avj