0

ceci est mon code de classe tsBehaviorSubject de switchMap alors getValue n'est pas une erreur de fonction

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

ce code est du service

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

Je déclare le type et le type rejetterai, mais pourtant, quand Je vous écris

console.log(product$.getValue) 

Je reçois cette erreur:

erreur TypeError: this.product $ .getValue est pas une fonction

grâce

Répondre

2

Ce n'est pas comment switchMap - et RxJS, en général - des œuvres. L'observable renvoyé par un opérateur dépend de l'observable sur lequel l'opérateur est appelé. Cette observable peut mettre en œuvre lift pour renvoyer une instance observable du même type.

Le résultat de votre appel à switchMap sera levé à partir du this.route.params observable. Ce n'est pas un BehaviorSubject et n'a pas une méthode getValue.

+0

pourriez-vous s'il vous plaît me dire la bonne façon de faire cela? –

+0

Vous ne pouvez pas faire ce que vous semblez vouloir faire dans l'extrait. Et le code dans votre question est tout ce qu'il y a à faire. En extrapolant à partir du code, il semble que vous essayez d'accéder à quelque chose de manière synchrone et ce n'est pas possible. – cartant

+0

c'est correct, j'essaie d'obtenir une valeur synchrone, et c'est possible avec BehaviorSubject, mon seul problème est que je ne pouvais pas retourner BehavorSubject à partir de swichmap. Je veux échapper au code imbriqué en m'abonnant et profiter de l'élégance de switchmap. –