1

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

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

         });
  }

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

4

1 回答 1

2

flatmapormergeMap有一个可选参数,称为resultSelector

基于源(外部)发射和内部 Observable 发射的值和索引在输出 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');

         });
于 2017-09-15T12:15:08.033 回答