我需要对observable中的observable的结果执行一个操作。完成observable完成后要执行的操作后,如何执行操作?
Component
checkIn(room: Room)
{
this.roomService.checkIn(room.number).subscribe(
response => {
this.checkInResponse = response;
// other codes
this.getRooms();
// Perform the following line of code after getRooms() is complete, i.e. this.rooms has been reloaded. Right now, it executes instantaneously, i.e. before this.getRooms() is complete.
this.setRoom = this.roomFromNumber(room.number);
},
error => {
console.log(error);
}
);
}
getRooms() {
this.roomService.getRooms().subscribe(
response => {
this.rooms = response;
},
error => {
console.log(error);
}
);
}
Service
getRooms(): Observable <any> {
return this.http.get('http://localhost:8000/api/rooms?token=' + this.token).map(
(response: Response) => {
return response.json().rooms;
});
}
checkIn(roomNumber: number) {
return this.http.post('http://localhost:8000/api/room/checkIn?token=' + this.token,
{
number: roomNumber
},
{
headers: new Headers({
'Content-Type' : 'application/json',
'X-Requested-With' : 'XMLHttpRequest',
})
});
}
在上面的代码中的问题是,this.setRoom = this.roomFromNumber(room.number);
this.getRooms()
之前执行。 getRooms()完成后,我需要执行以下代码行,即this.rooms已重新加载。
我可以简单地执行以下操作,在执行代码之前等待两秒钟,如果可观察事件发生在两秒钟内,则工作正常;这绝对不是正确的做法。
setTimeout(() => this.setRoom = this.roomFromNumber(room.number), 2000);
我做了它的工作另一种方式。我会试试这个,并让你知道它是否有效。非常感谢。 – anonym