当前位置: 首页 > 知识库问答 >
问题:

主体和行为主体有什么区别?

竺展
2023-03-14

我不清楚< code>Subject和< code>BehaviorSubject之间的区别。只是一个< code>BehaviorSubject有< code>getValue()函数吗?

共有3个答案

冉德元
2023-03-14

我刚刚创建了一个项目,解释了所有科目之间的区别:
https://github.com/piecioshka/rxjs-subject-vs-behavior-vs-replay-vs-async

童花蜂
2023-03-14

行为主体将返回订阅的初始值或当前值

var bSubject= new Rx.BehaviorSubject(0);  // 0 is the initial value

bSubject.subscribe({
  next: (v) => console.log('observerA: ' + v)  // output initial value, then new values on `next` triggers
});

bSubject.next(1);  // output new value 1 for 'observer A'
bSubject.next(2);  // output new value 2 for 'observer A', current value 2 for 'Observer B' on subscription

bSubject.subscribe({
  next: (v) => console.log('observerB: ' + v)  // output current value 2, then new values on `next` triggers
});

bSubject.next(3);

带输出:

observerA: 0
observerA: 1
observerA: 2
observerB: 2
observerA: 3
observerB: 3

Subject不返回订阅的当前值。它仅在<代码>时触发。接下来(value)调用并返回/输出< code >值

var subject = new Rx.Subject();

subject.next(1); //Subjects will not output this value

subject.subscribe({
  next: (v) => console.log('observerA: ' + v)
});
subject.subscribe({
  next: (v) => console.log('observerB: ' + v)
});

subject.next(2);
subject.next(3);

控制台上有以下输出:

observerA: 2
observerB: 2
observerA: 3
observerB: 3
公冶弘壮
2023-03-14

行为主体包含一个值。订阅后,它会立即发出该值。主题不保存值。

主题示例(使用RxJS 5 API):

const subject = new Rx.Subject();
subject.next(1);
subject.subscribe(x => console.log(x));

控制台输出将为空

行为主题示例:

const subject = new Rx.BehaviorSubject(0);
subject.next(1);
subject.subscribe(x => console.log(x));

控制台输出:1

此外:

  • BehaviorSubject 应该使用初始值创建:new Rx.BehaviorSubject(1)
  • 如果希望主题获取以前发布的值,请考虑重播主题
 类似资料:
  • 问题内容: 在安全框架的上下文中, 主题 , 用户 和 主体 这几个词通常会出现,我无法找到一个清晰的定义以及它们之间的区别。 那么,这些术语的确切含义是什么?为什么需要对 主体 和 主体 进行这些区分? 问题答案: 这些是按照属,种和个体是分级的方式进行分级的。 主题 -在安全上下文中, 主题 是请求访问 对象的 任何实体。这些是通用术语,用于表示请求访问的事物和针对其进行请求的事物。当您登录到

  • 在这个平台上,关于对象类的clone()方法有很多问题。每个人的回答都不一样。关于clone()为什么要受到保护,有很多问题。有人说.. null > 如果上面的第二点是正确的,那么我们如何直接访问子类中的clone()。 什么是不可克隆对象。 有什么需要重写clone()在子类中进行克隆的情况。而另一个包的受保护成员可以通过直接继承其父类在另一个包中访问。 为什么object.clone()没有

  • 我使用共享服务在2个独立组件之间传递数据。当我在共享服务中使用主题时,我无法在订阅组件的html中看到订阅的数据,但可以在订阅后在控制台中看到它。然而,如果我使用行为主题,它工作得很好。有人能解释一下原因吗? sharedservice.ts: 组件2.ts: 上面的控制台在两种情况下都打印出消息的值,但是没有以html的形式呈现主题。

  • 问题内容: 与函数相反,类的主体在定义时执行: 出: 为什么会这样呢?它与/方法和类属性有关吗? 问题答案: *Python首次导入模块时, *所有操作 均在模块级别执行。函数体(和生成器表达体)在这里是 例外 ,而不是规则。Python执行所有操作以创建模块中包含的 对象 ;像Python中的所有内容一样,类是对象,函数也是。 类主体使用单独的代码对象的唯一原因是因为类主体是在单独的名称空间中执

  • 问题内容: 以下代码令人惊讶地成功编译: 这个也是: 但这失败,并出现预期的错误: 用括号将第二个示例修改也失败: 它是Java编译器中的错误,还是我不知道的类型推断规则? 问题答案: 首先,值得一看的是什么。从文档中: 表示一个 接受单个输入参数且不返回结果的操作 。与大多数其他功能接口不同,消费者应该通过副作用来操作。 因此,它是一个接受字符串且不返回任何内容的函数。 成功编译,因为可以使用S

  • 我精通RxJS,并在Reactor framework(java)方面迈出了第一步。 Reactor中行为主体的等效物是什么? 或者与RxJS相比,Reactor中使用的模式完全不同吗?对于了解RxJS的人来说,有什么好的参考资料可以学习Reactor吗?