代码之家  ›  专栏  ›  技术社区  ›  Adrian Brand

Rxjs share操作符未给出预期结果

  •  0
  • Adrian Brand  · 技术社区  · 7 年前

    我正在尝试让rxjs操作符共享像 https://www.learnrxjs.io/operators/multicasting/share.html ,但我没有得到预期的结果。我希望“Running map函数”只记录一次。我错过什么了吗?

    const { of } = rxjs;
    const { map, share } = rxjs.operators;
    
    const obs$ = of('data');
    
    const mapped$ = obs$.pipe(map(d => {
      console.log('Running map function');
      return `mapped ${d}`;
    }));
    
    const shared$ = mapped$.pipe(share());
    
    shared$.subscribe(d => { console.log(d); });
    
    shared$.subscribe(d => { console.log(d); });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/6.3.3/rxjs.umd.min.js"></script>
    1 回复  |  直到 7 年前
        1
  •  1
  •   dsych    7 年前

    如前所述,你的潜艇是同步的。要获得预期的行为,可以使用调度程序。从你可以阅读的节杖开始 this article

    const { of, Observable, asyncScheduler } = rxjs;
    const { map, share, observeOn } = rxjs.operators;
    
    const obs$ = of('data').pipe(observeOn(asyncScheduler));
    
    const mapped$ = obs$.pipe(map(d => {
      console.log('Running map function');
      return `mapped ${d}`;
    }));
    
    const shared$ = mapped$.pipe(share());
    
    shared$.subscribe(d => { console.log(d); });
    
    shared$.subscribe(d => { console.log(d); });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/6.3.3/rxjs.umd.min.js"></script>