1

Je veux créer une observable qui
1. gets jeton avec la méthode getToken2
2. Utilisez ce jeton pour obtenir userdata avec flatMap
3. Attribuer vient de recevoir userData et le jeton (qui était reçu via flatMap) à localStorage
Le problème est que je ne peux pas accéder au jeton dans la seconde méthode de mappage.
Alors, comment puis-je transférer cette valeur de jeton dans le flux afin que je puisse y accéder.RxJS: Les valeurs de transfert dans le flux

getCurrentUser2() { 
     return this.getToken2() 
     .flatMap((token) => this.http.get(this.URL + '/ROS/profile?token=' + token)) 
     .map((res) => res.json().data) 
     .map((response) => { 

      localStorage.setItem('currentUser', JSON.stringify({ 
       token:token, ,**want to access token value here** 
       userProfile: response 
      })); 
      localStorage.setItem('orgId', response.structure.id); 
      return this.toUser(response, '12'); 

     }); 
    } 

S'il vous plaît donnez-moi une idée pour résoudre ce problème.
Cordialement

Répondre

2

Le flatmap ou mergeMap a un paramètre optionnel appelé resultSelector.

Une fonction pour produire la valeur sur la sortie Observable sur la base des valeurs et des indices de l'émission (externe) source et de l'émission intérieure observable. Les arguments passés à cette fonction sont:

outerValue: la valeur qui venait de la source
innerValue: la valeur qui venait de la projection Observable
outerIndex: l ' « indice » de la valeur qui venait de la source
innerIndex: l ' « indice » de la valeur de la observable projetée

return this.getToken2() 
     .flatMap((token) => this.http.get(this.URL + '/ROS/profile?token=' + token),(token,response,outerIndex,innerIndex) => [token,response.json().data])) 
     .map((response) => { 
     //response is an array with both outer output and inner output. 
      localStorage.setItem('currentUser', JSON.stringify({ 
       token:response[0], 
       userProfile: response[1] 
      })); 
      localStorage.setItem('orgId', response[1].structure.id); 
      return this.toUser(response[1], '12'); 

     }); 
+0

Merci beaucoup pour une grande solution. Cela m'a vraiment aidé! –