startWith()返回Subject

时间:2017-10-11 18:04:23

标签: rxjs observable

我想使用Subject使用默认值发出值。

startWith("def")就是这个方法。

subject = new Rx.Subject().startWith("def value"); 

遗憾的是startWIth返回Observable,因此我无法使用onNext(),这是我首先使用Subject的唯一原因。这个问题的解决方法是什么?

subject.onNext("next val"); //cannot call onNext, it is not a function of Observable

2 个答案:

答案 0 :(得分:4)

只需跟踪可观察量和主题。我经常做类似......

export class FooService {

  private _foos: Subject<Foo> = new subject<Foo>();

  public get foos: Observable<Foo> {
    return this._foos.startsWith(...);
  }

  public emitFoo(foo: Foo) {
    this._foos.next(foo);
  }

}

答案 1 :(得分:3)

你的问题并不完全清楚。如果你希望所有观察者在其他任何事情之前看到“def值”,那么请使用@Pace的答案。

但是如果你想让所有观察者都以“最近发出的值”开头,并且如果他们在你发出第一个值之前订阅了“def value”,那么使用BehaviorSubject

var subject = new BehaviorSubject("default val");
subject.subscribe(...); // sees "default val", then anything you emit.

subject.next("foo");
subject.subscribe(...); // sees "foo", then anything else you emit (does not see "default val")