2017-04-06 2 views
3

Ich habe Service:.asObservable möchten nicht mit Observable.forkJoin arbeiten

export class ConfigService { 
    private _config: BehaviorSubject<object> = new BehaviorSubject(null); 
    public config: Observable<object> = this._config.asObservable(); 

    constructor(private api: APIService) { 
    this.loadConfigs(); 
    } 

    loadConfigs() { 
    this.api.get('/configs').subscribe(res => this._config.next(res)); 
    } 
} 

Der Versuch, diese von der Komponente zu nennen:

... 
Observable.forkJoin([someService.config]) 
    .subscribe(res => console.log(res)) //not working 

someService.config.subscribe(res => console.log(res)) // working 
... 

Wie ich Observable.forkJoin mit Observable Variable verwenden config ?

Ich muss Configs im Dienst speichern und warten, bis sie nicht mehr angezündet werden und andere nicht beendet, um Loader zu stoppen.

Antwort

2

Da Sie BehaviorSubject verwenden, sollten Sie wissen, dass Sie next() und complete() manuell aufrufen können.

Der Operator forkJoin() gibt nur aus, wenn alle Observablen der Quelle mindestens einen Wert und haben, die alle ausgefüllt wurden. Da Sie ein Subject und die Methode asObservable verwenden, wird die Quelle Observable nie abgeschlossen und daher gibt der Operator forkJoin niemals etwas aus.

Btw, es macht nicht viel Sinn, forkJoin mit nur einer Quelle Observable zu verwenden. Vielleicht auch einen Blick auf zip() oder combineLatest() Betreiber, die ähnlich sind und vielleicht ist es das, was Sie brauchen.

Zwei sehr ähnliche Frage:

+0

tywm für Antwort – user2886051

Verwandte Themen