publish

签名: publish() : ConnectableObservable

共享源 observable 并通过调用 connect 方法使其变成热的。

publish - 图1

示例

示例 1: 在订阅之后调用 observable 的 connect 方法

( jsBin |
jsFiddle )

  1. import { interval } from 'rxjs/observable/of';
  2. import { publish, tap } 'rxjs/operators';
  3. // 每1秒发出值
  4. const source = interval(1000);
  5. const example = source.pipe(
  6. // 副作用只会执行1次
  7. tap(_ => console.log('Do Something!')),
  8. // 不会做任何事直到 connect() 被调用
  9. publish()
  10. );
  11. /*
  12. source 不会发出任何值直到 connect() 被调用
  13. 输出: (5秒后)
  14. "Do Something!"
  15. "Subscriber One: 0"
  16. "Subscriber Two: 0"
  17. "Do Something!"
  18. "Subscriber One: 1"
  19. "Subscriber Two: 1"
  20. */
  21. const subscribe = example.subscribe(val =>
  22. console.log(`Subscriber One: ${val}`)
  23. );
  24. const subscribeTwo = example.subscribe(val =>
  25. console.log(`Subscriber Two: ${val}`)
  26. );
  27. // 5秒后调用 connect,这会使得 source 开始发出值
  28. setTimeout(() => {
  29. example.connect();
  30. }, 5000);

其他资源

:file_folder: 源码: https://github.com/ReactiveX/rxjs/blob/master/src/internal/operators/publish.ts