【问题标题】:Synchronous RxJs unsubscription not working同步 RxJs 取消订阅不起作用
【发布时间】:2020-05-27 14:53:15
【问题描述】:

演示:https://stackblitz.com/edit/rxjs-unsubscribe-issue?file=index.ts

以下代码不起作用

错误:无法读取未定义的属性“取消订阅”

    const a = (): Observable<any> =>
    new Observable(sub => {
      sub.next(1);
      return () => {
        console.log('unsubscribe');
      };
    });
    const observer = a().subscribe(
      value => {
        console.log('Subscription');
        observer.unsubscribe();
      },
      e => console.log(e),
      () => console.log('complete')
    );

但以下代码可以正常工作

    const b = (): Observable<any> =>
    new Observable(sub => {
      setTimeout(()=>sub.next(1),0);
      return () => {
        console.log('unsubscribe');
      };
    });
    const observer2 = b().subscribe(
      value => {
        console.log('Subscription b');
        observer2.unsubscribe();
      },
      e => console.log(e),
      () => console.log('complete')
    );

帮我理解背后的原因

【问题讨论】:

    标签: rxjs observable subscription rxjs6 rxjs-observables


    【解决方案1】:

    正如您在问题标题中提到的,第一个示例是同步的,因此您在仍处于 .subscribe() 方法内部时获得了第一个值。当然,observer,它应该有一个Subscription 对象还没有被初始化。

    如果您想在收到单个值后取消订阅,我建议您使用.take(1)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 2017-03-26
      • 2020-10-28
      • 2020-10-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多