1

I want to create an observable which
1. Gets token with getToken2 method
2. Use this token to get userdata with flatMap
3. Assign just received userData and token( which was received via flatMap) to localStorage
The problem is that I am unable to access the token in second map method.
So How can I transfer this token value in stream so I can access it.

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

         });
  }

Please give me idea to solve this issue.
Kind Regards

Vugar Abdullayev
  • 1,852
  • 3
  • 21
  • 46

1 Answers1

2

The flatmap or mergeMap has an optional parameter called resultSelector.

A function to produce the value on the output Observable based on the values and the indices of the source (outer) emission and the inner Observable emission. The arguments passed to this function are:

outerValue: the value that came from the source
innerValue: the value that came from the projected Observable
outerIndex: the "index" of the value that came from the source
innerIndex: the "index" of the value from the projected Observable

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

         });
Community
  • 1
  • 1
Suraj Rao
  • 29,388
  • 11
  • 94
  • 103