2017-07-14 11 views
0

diese ts Code meiner Klasse istBehaviorSubject von switchMap dann ist getValue kein Funktionsfehler

this.product$ = <BehaviorSubject<Product>>this.route.params.switchMap(
    (params): BehaviorSubject<Product> => 
    this.productService.getProduct(params['_id']) 
); 

dies Code aus dem Dienst

getProduct(_id: string): BehaviorSubject<Product> { 
    const bs = new BehaviorSubject<Product> 
        (ProductService.initializeProduct()); 
    if (_id !== '0') { 
     this.productSub = this.databaseService.getProduct(_id).subscribe(
     product => { 
     bs.next(product); 
     } 
    ); 
    } 
    return bs; 
    } 

Ich erkläre Typ, und auch gegossen Art, aber doch, wenn ich schreibe

console.log(product$.getValue) 

ich diesen Fehler:

ERROR Typeerror: this.product $ .getValue ist keine Funktion

dank

Antwort

2

Das ist nicht, wie switchMap ist - und RxJS im Allgemeinen - funktioniert. Das Observable, das von einem Operator zurückgegeben wird, hängt von der Observablen ab, auf der der Operator aufgerufen wird. Diese Observable kann lift implementieren, um eine beobachtbare Instanz desselben Typs zurückzugeben.

Das Ergebnis Ihres Anrufs zu switchMap wird von der this.route.params Observable aufgehoben werden. Es ist kein BehaviorSubject und hat keine getValue Methode.

+0

Würden Sie mir bitte den richtigen Weg sagen, dies zu tun? –

+0

10 Sie können nicht tun, was Sie im Snippet tun möchten. Und der Code in Ihrer Frage ist alles, was Sie tun können. Extrapoliert man aus dem Code, sieht es so aus, als würde man versuchen, synchron auf etwas zuzugreifen, was nicht möglich ist. – cartant

+0

das ist korrekt, ich versuche, Wert synchron zu bekommen, und das ist mit BehaviorSubject möglich, mein einziges Problem ist, dass ich BehavorSubject von swichmap nicht zurückgeben konnte. Ich möchte den verschachtelten Code in subscribe verlassen und die Eleganz der Switchmap genießen. –

Verwandte Themen