Это происходит потому, что у вас есть три подписки на requestStream
.Ваша интуиция в том, как эти три взаимодействуют, верна, потому что ваша requestStream
Observable холодная, она будет создавать новый поток каждый раз, когда есть подписка.
Это не обязательно очевидно, потому что только одна подпискасделано явно, но каждый раз, когда вы передаете requestStream
на combineLatest
, в конечном итоге создается новая подписка, которая, в свою очередь, запускает новый поток, который в этом случае вызывает ваш базовый API.
Если вы не используетене хочу, чтобы это произошло, я бы предложил вам использовать оператор многоадресной рассылки, например publishLast
, поэтому requestStream
станет:
let requestStream = Rx.Observable
.of(`${GITHUB_API}?since=${randomNumber()}`)
.mergeMap(url => {
console.log(`performing request to: ${url}`)
return Rx.Observable.from(jQuery.getJSON(url))
})
.publishLast();
В этом случае requestStream
теперь фактическиConnectableObservable
так что вам нужно будет также запустить его в какой-то момент, обычно вы будете ждать, пока все ваши подписчики не будут подключены.
/* Rest of you example */
.map(event => event.target.parentNode)
.subscribe(user => {
user.remove();
userRemovedStream.next('');
});
requestStream.connect();