【问题标题】:what is diference between observable created from of or from and those created from subjects, or behaviour subjects? [duplicate]从 of 或 from 创建的 observable 与从主题或行为主题创建的 observable 有什么区别? [复制]
【发布时间】:2021-06-16 09:56:57
【问题描述】:

从 of 或 from 创建的 observable 与从 subject 或 behavior subject 创建的 observable 有什么区别?

这是一个关于有什么区别的一般问题:

of([1, 2, 3]).subscribe(x => console.log(x));

from([1, 2, 3]).subscribe(x => console.log(x));


const subject = new BehaviorSubject();

// subscriber 1
subject.subscribe((data) => {
    console.log('Subscriber A:', data);
});

subject.next(Math.random());
subject.next(Math.random());

我知道的一件事是,对于主题,我们可以控制发出的值,而对于 observable,我们没有。

但是考虑一下,管道 observable 与控制 observable 不同。那么有什么区别呢?

关于这个话题,我浏览过关于 SO 的不同帖子,但没有什么足够令人信服的!

What is the difference between a Observable and a Subject in rxjs?

据说主题用于多播,即向所有订阅者传递相同的值。所以不是'observables 也做同样的事情,或者他们以不同的方式提供它们。

【问题讨论】:

  • 没有。它没有/

标签: javascript rxjs


【解决方案1】:

看答案很简单! 使用主题,您可以将新值推送到流中,以便订阅者接收它们,而与 of 和 from 您一样,您会被初始值困住,除非再次有源从后面触发值,例如另一个可观察的事件承诺一个用户界面事件。

【讨论】:

  • 那么这个怎么样? const observable = new Observable(subscriber => { subscriber.next(1); subscriber.next(2); subscriber.next(3); setTimeout(() => { subscriber.next(4); subscriber.complete(); }, 1000); });
  • 这也是可观察的吧?而不是科目!
  • 这就是我要说的。当您使用 from、of 甚至 new observable() 时,您无权访问创建流的工厂。但是在使用主题时,您可以访问该工厂,并且可以将新的价值推向源泉。我希望这很清楚。
  • 可能会有其他人帮助您。
  • 好的。那你能评论一下吗?据说主题用于多播,即向所有订阅者传递相同的值。所以不是'observables 也做同样的事情,或者他们以不同的方式提供它们。
【解决方案2】:

“但是考虑一下,管道 observable 和控制 observable 不一样。那么有什么区别呢?” 管道创建一个新的 observable。您无法控制原始的 observable。

主体是观察者和可观察者。 observable 和 subject 之间的主要区别在于 observable 不必是观察者,但 subject 必须是观察者。

offrom 创建不是观察者的可观察对象。对象是观察者。

【讨论】:

【解决方案3】:

管道 observable 与控制 observable 不一样吗?那么有什么区别呢?

嗯,是的,也不是。您可以使用可管道操作符来控制行为并转换可观察流的输出,但是……您不能创建新的发射。

创建 observable 时,发射行为是预先确定的。这对于由 rxjs 创建函数 offrominterval 等创建的 observables 是正确的;以及何时“手动”创建它们,如下例所示:

const observable$ = new Observable(
  observer => {
    observer.next(1);
    observer.next(2);
    observer.next(3);
    observer.complete();
});

observable$ 将发出 123,仅此而已。这个 observable 无法再发出任何值了。

主题为您提供了一种在任何时间点发出值的方法。这是一个 Observable 和 Observer 一体机。主题的发射是在主题创建后控制的。

offrom 创建的 observable 与从主题或行为主题创建的 observable 有什么区别?

主题与可观察对象和主题之间的可观察行为的一个根本区别是可观察对象是单播的,而主题是多播的。 This answer 很好地解释了这一点。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 2014-04-11
  • 2016-07-14
  • 1970-01-01
  • 2021-09-09
  • 2021-02-03
相关资源
最近更新 更多