【问题标题】:Difference between 'new BehaviorSubject' and 'BehaviorSubject.create''new BehaviorSubject' 和 'BehaviorSubject.create' 之间的区别
【发布时间】:2016-09-10 03:06:29
【问题描述】:

我正在使用 Angular 2 和 RxJS 5。

这两者有什么区别:

应该先使用哪个?谢谢

isOpen$ = new BehaviorSubject<boolean>(true);

isOpen$ = BehaviorSubject.create(true);

【问题讨论】:

标签: angular rxjs5


【解决方案1】:

BehaviorSubject 没有create 方法,所以我猜Subject 基类正在公开它。

使用构造函数。 在这种情况下,您应该使用 BehaviorSubject 的构造函数。 create 方法用于组合ObserverObservable

例如,您可以通过以下方式将 WebSocket 转换为 Subject

var webSocket = new WebSocket(url);

var observer = Observer.create(next => webSocket.send(JSON.stringify(next)));
var observable = Observable.fromEvent(webSocket, 'message', m => JSON.parse(m.data));

var subject = Subject.create(observer, observable);

【讨论】:

    【解决方案2】:

    它们在Subject 上似乎完全相同。但是,在 BehaviorSubject 上没有 create 方法。继承自Subject

    这是来自Subject的代码

    static create: Function = <T>(destination: Observer<T>, source: Observable<T>): Subject<T> => {
      return new Subject<T>(destination, source);
    };
    
    constructor(protected destination?: Observer<T>, protected source?: Observable<T>) {
      super();
      this.source = source;
    }
    

    BehaviorSubject,它可能还没有实现。未来可能会实施。

    所以,在BehaviorSubjectcreate 的行为与构造函数完全不同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-26
      • 1970-01-01
      • 1970-01-01
      • 2020-09-24
      • 2016-10-04
      • 2015-07-01
      • 1970-01-01
      • 2013-12-20
      相关资源
      最近更新 更多