Tôi đang gặp một số sự cố khi thực hiện các cuộc gọi lồng nhau. Bằng cách đó, tôi có nghĩa là một cuộc gọi đến một dịch vụ http truy xuất một người dùng, sau đó nhận được id từ người dùng để thực hiện cuộc gọi http khác và cuối cùng hiển thị kết quả trên màn hình.Cách thực hiện các cuộc gọi có thể quan sát lồng nhau trong Angular2
1) HTTP GET 1: có được người dùng
2) HTTP GET 2: có được sở thích của người dùng thông qua một định danh duy nhất như một tham số
này chuyển thành đoạn mã sau vào phần Blah.ts
:
phiên bản 1 - mã này không hiển thị bất cứ điều gì
ngOnInit() {
this.userService.getUser()
.flatMap(u => {
this.user = u; // save the user
return Observable.of(u); // pass on the Observable
})
.flatMap(u => this.userService.getPreferences(this.user.username)) // get the preferences for this user
.map(p => {
this.preferences = p; // save the preferences
});
}
phiên bản 2 - mã này hoạt động nhưng dường như cách tiếp cận sai với tôi:
this.userService.getUser().subscribe(u => {
this.user = u;
this.userService.getPreferences(this.user.username).subscribe(prefs => {
this.preferences = prefs;
});
});
Và đây là mẫu:
<h3>User</h3>
<div class="row col-md-12">
<div class="col-md-6">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">User details</h3>
</div>
<div class="panel-body">
<table class="table table-condensed">
<thead>
<tr>
<th>Username</th>
<th>Full Name</th>
<th>Enabled</th>
</tr>
</thead>
<tbody>
<tr>
<td>{{user?.username}}</td>
<td>{{user?.fullName}}</td>
<td>{{user?.enabled}}</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<!-- end of col 1-->
<div class="col-md-6">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">User preferences</h3>
</div>
<div class="panel-body">
<table class="table table-condensed">
<thead>
<tr>
<th>Language</th>
<th>Locale</th>
</tr>
</thead>
<tbody>
<tr>
<td>{{preferences?.preferences?.get('language')}}</td>
<td>{{preferences?.preferences?.get('locale')}}</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<!-- end of col 2-->
</div>
<!-- end of row 1-->
Tôi không nghĩ có bất kỳ điểm nào trong hiển thị dịch vụ , mà chỉ đơn giản làm cho http get()
cuộc gọi như:
http.get('http://blablah/users/')
.map((response) => response.json())
Xin gợi ý đó là cách tiếp cận làm việc tốt nhất để xác định một chuỗi các Observables.
"tác phẩm mã này, nhưng dường như là cách tiếp cận sai đối với tôi ..." Tại sao? –