小编Ama*_*taj的帖子

用作 PartialObserver 的BehaviorSubject 破坏了BehaviorSubject 上的订阅

我正在查看可观察对象的接口,发现您可以将任何实现 PartialObserver 的内容传递给订阅函数。所以我用BehaviorSubject 做到了这一点。

像这样(A)

source$
      .pipe(
        tap(() => console.log('X')),
      )
      .subscribe(this._titlesX$);
Run Code Online (Sandbox Code Playgroud)

于是我就这么做了,但发现了一些很奇怪的事情。如果我将行为传递给订阅函数,则会发出值,但要看到这一点,您必须在使用BehaviorSubject 作为 PartialObserver 之前进行订阅。

在BehaviorSubject 的文档中,您可以找到以下内容:

A variant of Subject that requires an initial value and emits its current value whenever it is subscribed to.
Run Code Online (Sandbox Code Playgroud)

因此,当使用BehaviorSubject作为partialObserver时,这种行为就会中断。(没有双关语)

但是当我使用这种方法时:像这样(B)

source$
     .pipe(
        tap(() => console.log('X')),
      )
      .subscribe(res => this._titlesX$(res));
Run Code Online (Sandbox Code Playgroud)

一切都按预期进行。

为什么方法A不起作用?这是一个错误还是我只是使用错误?

这是 stackblitz 所有设置的链接。链接到 stackblitz 项目

titleX:代表方法A titleY:代表方法B

使用BehaviorSubject 进行订阅应该是可能的。您订阅的时间并不重要。否则,不应允许它作为 subscribe 方法的参数。

reactive-programming observable rxjs angular

4
推荐指数
1
解决办法
1310
查看次数

标签 统计

angular ×1

observable ×1

reactive-programming ×1

rxjs ×1