rxjs——subject和Observable的区别

一个 Observable 是可以被多个 observer 订阅的,只是每个订阅都是一个新的独立的 Observable execution :

const { Observable } = Rx

const clock$ = Observable.interval(1000).take(3);

const observerA = {
  next(v) {
    console.log(‘A next: ‘ + v)
  }
}
const observerB = {
  next(v) {
    console.log(‘B next: ‘ + v)
  }
}

clock$.subscribe(observerA) // a Observable execution

setTimeout(() => {
  clock$.subscribe(observerB) // another new Observable execution
}, 2000)

/*
 * A next: 0
 * A next: 1
 * A next: 2
 * B next: 0
 * B next: 1
 * B next: 2
 */

如果是同一个 shared Observable execution 的话,B的第一个 emit 的值应该是 2 而不是 0 ,并且只有且仅有一个值 2

const { Observable, Subject } = Rx

const clock$ = Observable.interval(1000).take(3);

const observerA = {
  next(v) {
    console.log(‘A next: ‘ + v)
  }
}
const observerB = {
  next(v) {
    console.log(‘B next: ‘ + v)
  }
}
const subject = new Subject()
subject.subscribe(observerA)

clock$.subscribe(subject)

setTimeout(() => {
  subject.subscribe(observerB)
}, 2000)

/*
 * A next: 0
 * A next: 1
 * A next: 2
 * B next: 2
 */

由于 Subject 是多播,也就是每个 observer 都 share 同一个 Observable execution 。

所以B的第一个 emit 的值并且只有一个值是 2 !

大概 Subject 和 Observable 之间一个很重要的区别就是 Subject 是有状态的,它维护观察者列表。另一方面,Observable 真的只是一个函数,它建立了观察本身。

原文地址:https://www.cnblogs.com/panfengde/p/10138899.html

时间: 2024-08-02 22:56:34

rxjs——subject和Observable的区别的相关文章

[RxJS] Subject: an Observable and Observer hybrid

This lesson teaches you how a Subject is simply a hybrid of Observable and Observer which can act as a bridge between the source Observable and multiple observers, effectively making it possible for multiple observers to share the same Observable exe

关于rxjs subject订阅分发实现Angular的全局数据管理与同步更新

自定义实现angular中数据的状态管理,如有不妥请指正 一.先介绍一下rxjs中subject: Import {subject}from’rxjs’ Subject 数据的订阅与分发,结合报刊的发布与订阅进行功能的模拟,subject即是observeable对象也是observer对象,subject对于后期没有数据更新时所添加的订阅者是不怎么友好的,因为不跟新数据时订阅者就不在收到返回的数值     const interval$ = interval(1000).pipe(take(1

[RxJS] Subject basic

A Subject is a type that implements both Observer and Observable types. As an Observer, it can subscribe to Observables, and as an Observable it can produce values and have Observersw subscribe it. First time I read implements both Observer and Obser

[Javascript + rxjs] Introducing the Observable

In this lesson we will get introduced to the Observable type. An Observable is a collection that arrives over time. Observables can be used to model events, asynchronous requests, and animations. Observables can also be transformed, combined, and con

[rxjs] Creating An Observable with RxJS

Create an observable var Observable = Rx.Observable; var source = Observable.create(function(observe){ var person = { name: "Zhentian", message: "Hello World!" }; observe.onNext(person); observe.onCompleted(); }); var sub = source.subs

RXJS Observable的冷,热和Subject

一.Observable的冷和热 Observable 热:直播.所有的观察者,无论进来的早还是晚,看到的是同样内容的同样进度,订阅的时候得到的都是最新时刻发送的值. Observable 冷:点播. 新的订阅者每次从头开始. 冷的Observable例子: 一开始有个订阅者, 两秒后又有个订阅者,这两个序列按照自己的节奏走的,不同步.每个流进行都会从interval的0开始. console.log('RxJS included?', !!Rx); const count$ = Rx.Obse

[RxJS] Reusable multicasting with Subject factories

The way we use publish() (or multicast with an RxJS Subject) makes the shared Observable not reusable if the shared execution happens to complete or emit an error. In this lesson we will see how to use a simple Subject factory function in order to cr

RxJS学习笔记之Subject

本文为原创文章,转载请标明出处 目录 Subject BehaviorSubject ReplaySubject AsyncSubject 1. Subject 总的来说,Subject 既是能够将值多播给多个观察者的特殊的可观察对象,因为可以添加观察者并使用 subscribe 方法来接收值:又是观察者,因为它有 next(v).error(e).complete() 方法.下面这段代码很好的说明了每个 Subject 既是 Observable 又是 Observer. var subjec

Angular2中的RxJS

RxJS库 RxJS(Reactive Extensions)是个Angular提供的第三方库,实现异步观察模式(asynchronous observable pattern). 启用RxJS操作 RxJS非常大,通常只要我们所需要的特性就好了.Angular在rxjs/Observable模块中提供了简版的Observable,但是它缺乏我们所需要的所有的操作,包括上面提到的map方法. 我们在应用启动时引入所有RxJS操作: import 'rxjs/Rx'; 首先我们观'rxjs/Obs