2017-10-11 4 views
0

Je souhaite émettre des valeurs à l'aide de Subject avec la valeur par défaut.startWith() qui renvoie Objet

startWith("def") est la méthode pour cela.

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

malheureusement startWIth retours Observable et donc je ne peux pas utiliser onNext(), qui est la seule raison pour laquelle je me sers sujet en premier lieu. Quelle est la solution de contournement pour ce problème?

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

Répondre

3

Il suffit de suivre à la fois l'observable et le sujet. Je fais habituellement quelque chose comme ...

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); 
    } 

} 
2

Votre question n'est pas entièrement claire. Si vous voulez que tous les observateurs voient "valeur de def" avant toute autre chose, utilisez la réponse de @ Pace.

Mais si vous voulez que tous les observateurs à commencer par « la valeur la plus récemment émise » et utilisez « valeur def » si elles souscrivent avant émettez la première valeur, puis utilisez un 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")