【问题标题】:Rxjs - Tap isn't triggered by subscribe in concatMap()Rxjs - 在 concatMap() 中订阅不会触发点击
【发布时间】:2019-08-16 12:49:30
【问题描述】:

我有一个映射可观察对象的主题,我订阅了 concatMap 中的可观察对象,但它不会从订阅中触发 tap()。

this.streamA$ = this.streamService.getStream(1)
      .pipe(
        tap(data => console.log('stream data:', data))
      );

主题

this.images$ = this.queue.pipe(concatMap((event: Observable<string>) => {
      // when an event arrives here it is still wrapped in observable

      // subscribe isn't triggering tap()
      event.subscribe(data => {
        //console.log('inner observable subscription:', data);
      });

      // observable goes to the image$ observable, it is unwrapped by: image$ | async in template
      return event;
    }));

服务功能

  getStream(time: number): Observable<string> {

    let timer$ = timer(2000);
    console.log('get stream');

    const observable = new Observable<string>(observer => {

      timer$.pipe(
        map(() => {
          observer.next('http response 1');
          observer.complete();
        })
      ).subscribe();

    });
    return observable;
  }

更新:

event.subscribe(data => {
         //console.log('inner observable subscription:', data);
      });

订阅中不包含console.log,这是输出:

stream data: http response 1

使用console.log,同时打印这3行:

stream data: http response 1
inner observable subscription: http response 1
stream data: http response 1

【问题讨论】:

    标签: rxjs


    【解决方案1】:

    当你在 concatMap 中有一个 Observable 时,你不需要订阅。你能尝试一下这些方法吗?

    this.images$ = this.queue.pipe(
      concatMap(event => event), // I assume the event here is something like this.streamA$
      tap(data => // do stuff with data)
    );
    

    【讨论】:

    • 我知道我只是想知道为什么没有触发两次点击
    • 因为源 Observable 没有发射任何东西。如果您希望它在新观察者订阅时发出其最新值,请使用BehaviorSubject
    • 令人困惑:S concatMap 中的事件是什么,一个正在进行的流?订阅事件时订阅的是什么?
    • 其实我刚刚意识到,你写的方式肯定会到处泄漏(当然,除非event 完成)。你一次又一次地订阅一个 Observable,从不破坏之前的订阅……至于为什么它没有命中 tap,那是因为它是来自 Observable 的发射触发了新的订阅。因此,在该内部订阅之后 不会发出任何内容。你明白我的意思吗?
    • tap 好像真的在工作,我会做一个 stackblitz。当我在 concatMap 中订阅事件时,它会触发额外的流。
    猜你喜欢
    • 1970-01-01
    • 2023-03-12
    • 2022-07-11
    • 2021-12-22
    • 1970-01-01
    • 2018-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多