• share
    • 签名: share(): Observable
  • 在多个订阅者间共享源 observable 。
    • 示例
      • 示例 1: 多个订阅者共享源 observable
  • 相关食谱
  • 其他资源
  • 其他资源

    share

    签名: share(): Observable

    在多个订阅者间共享源 observable 。


    :bulb: share 就像是使用了 Subject 和 refCount 的 multicast!


    share - 图2

    示例

    示例 1: 多个订阅者共享源 observable

    ( jsBin |
    jsFiddle )

    1. import { timer } from 'rxjs/observable/timer';
    2. import { tap, mapTo, share } 'rxjs/operators';
    3. // 1秒后发出值
    4. const source = timer(1000);
    5. // 输出副作用,然后发出结果
    6. const example = source.pipe(
    7. tap(() => console.log('***SIDE EFFECT***')),
    8. mapTo('***RESULT***')
    9. );
    10. /*
    11. ***不共享的话,副作用会执行两次***
    12. 输出:
    13. "***SIDE EFFECT***"
    14. "***RESULT***"
    15. "***SIDE EFFECT***"
    16. "***RESULT***"
    17. */
    18. const subscribe = example.subscribe(val => console.log(val));
    19. const subscribeTwo = example.subscribe(val => console.log(val));
    20. // 在多个订阅者间共享 observable
    21. const sharedExample = example.pipe(share());
    22. /*
    23. ***共享的话,副作用只执行一次***
    24. 输出:
    25. "***SIDE EFFECT***"
    26. "***RESULT***"
    27. "***RESULT***"
    28. */
    29. const subscribeThree = sharedExample.subscribe(val => console.log(val));
    30. const subscribeFour = sharedExample.subscribe(val => console.log(val));

    相关食谱

    • 进度条
    • 游戏循环

    其他资源

    其他资源

    • share :newspaper: - 官方文档
    • 使用 share 共享流 :video_camera: :dollar: - John Linquist

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