RxJS:在流中传输值

时间:2017-09-15 11:34:01

标签: angular rxjs reactive-programming angular2-observables rxjs-dom

我想创建一个可观察的 1.使用getToken2方法获取标记
2.使用此标记获取flatMap用户数据 3.将刚收到的userData和令牌(通过flatMap接收)分配给localStorage
问题是我无法在第二个map方法中访问令牌。
那么如何在流中传输此标记值以便我可以访问它。

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

         });
  }

请给我解决这个问题的想法。
亲切的问候

1 个答案:

答案 0 :(得分:2)

flatmapmergeMap有一个名为resultSelector的可选参数。

  

根据源(外部)发射和内部可观察发射的值和指数在输出Observable上产生值的函数。传递给此函数的参数是:

     

outerValue:来自源的值   innerValue:来自预测的Observable的值   outerIndex:来自源的值的“索引”   innerIndex:投射的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');

         });