Мне сложно переносить мозг вокруг наблюдаемых в Angular. Я прихожу из мира PHP, где вещи определенно не асинхронны.
У меня есть компонент, который просто отображает список сообщений для общей темы. Пока у меня есть одна тема, к которой относятся все сообщения. Если тема не существует, то она должна быть создана. Вызов сообщения и темы выполняется через REST api.
В неасинхронном мире я запрограммировал его по порядку. Служба сообщений увидит, существует ли тема. Если это не так, то это создает сервис тем. После того, как у него есть тема, он извлекает все сообщения в этом разделе.
Я понимаю, что вы подписываетесь на наблюдаемое, но что происходит, когда должна быть серия вещей, которая должна произойти по порядку? angular 2 http documentation проходит очень простой пример обновления списка героев при выполнении одного вызова.
Компонент
export class NotificationListComponent implements OnInit {
constructor(private _notificationService:NotificationService) {
}
***
ngOnInit() {
this.getNotifications();
}
getNotifications() {
this._notificationService.getNotifications()
.subscribe(
notifications => this.notifications = notifications,
error => this.errorMessage = <any>error);
}
Служба уведомлений
...
getNotifications() {
// call the topic service here for general topic??
return this.http.get('/messages?order[datesent]=DESC')
.map((res) => {
return res.json()["hydra:member"];
})
.map((notifications:Array<any>) => {
let result:Array<Notification> = [];
notifications.forEach((jsonNotification) => {
var Notification:Notification = {
message: jsonNotification.message,
topic: jsonNotification.topic,
datesent: new Date(jsonNotification.datesent),
};
result.push(Notification);
});
return result;
})
.catch(this.handleError);
}
...
Служба тем
...
getGeneralTopic() {
var generalTopic;
this.http.get('/topics?name=general')
.map((res) => {
return res.json()["hydra:member"][0];
})
.do(data => console.log(data))
.subscribe(generalTopic => res);
}
...