Example 1: Connect observable after subscribers
( StackBlitz | jsBin | jsFiddle )
// RxJS v6+import { interval } from 'rxjs';import { publish, tap } from 'rxjs/operators';//emit value every 1 secondconst source = interval(1000);//do nothing until connect() is calledconst example = publish()(source.pipe(//side effects will be executed oncetap(_ => console.log('Do Something!')),));/*source will not emit values until connect() is calledoutput: (after 5s)"Do Something!""Subscriber One: 0""Subscriber Two: 0""Do Something!""Subscriber One: 1""Subscriber Two: 1"*/const subscribe = example.subscribe(val =>console.log(`Subscriber One: ${val}`));const subscribeTwo = example.subscribe(val =>console.log(`Subscriber Two: ${val}`));//call connect after 5 seconds, causing source to begin emitting itemssetTimeout(() => {example.connect();}, 5000);
publish 📰 - Official docs
📁 Source Code: https://github.com/ReactiveX/rxjs/blob/master/src/internal/operators/publish.ts