Отказ от ответственности: Я не использовал angular2, но довольно часто использую RxJS.
Я могу сказать, что, как правило, дело в том, что для вещей с одним выстрелом, таких как HTTP-запрос, созданный Observable будет получать только один результат от этого запроса. Если вы хотите сделать больше запросов, вам нужно будет снова вызвать метод. т.е.
From the docs
$http.get('/people.json').map(res => res.json()).subscribe(people => this.people = people);
Теперь, если вы планируете сделать несколько последующих запросов, то обычно вы будете инициировать вызов с каким-либо другим событием, может быть, пользовательское событие или событие в сети, вы можете даже установить его до Периодически запускайте каждую пару секунд. Чтобы не «сломать цепочку», вам нужно будет использовать один из вариантов flatMap
(который в основном .map().merge()
), чтобы выровнять результаты в одну цепочку.
Например, если у вас произвольное событие (синтаксис примечания может немного отличаться, как есть несколько версий RxJS там):
Rx.Observable.fromEvent($someButton, 'click')
//Gather the parameters for the request
.map(e => {id : 'abc123'})
//Flatten each request into a single stream so the observer
//never knows the difference
.flatMap(params => $http.get(`/people/${params.id}`),
(params, res) => res.json())
//Do your update here
.subscribe(person => this.people[person.id] = person);