Skip to content

Files

Latest commit

43c030b · Mar 19, 2018

History

History
59 lines (45 loc) · 1.59 KB

publish.md

File metadata and controls

59 lines (45 loc) · 1.59 KB

publish

signature: publish() : ConnectableObservable

Share source and make hot by calling connect.

Examples

Example 1: Connect observable after subscribers

( jsBin | jsFiddle )

import { interval } from 'rxjs/observable/of';
import { publish, tap } 'rxjs/operators';

//emit value every 1 second
const source = interval(1000);
const example = source.pipe(
  //side effects will be executed once
  tap(_ => console.log('Do Something!')),
  //do nothing until connect() is called
  publish()
);


/*
  source will not emit values until connect() is called
  output: (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 items
setTimeout(() => {
  example.connect();
}, 5000);

Additional Resources

📁 Source Code: https://github.com/ReactiveX/rxjs/blob/master/src/internal/operators/publish.ts