【问题标题】:RxJS: Transfer values in streamRxJS:在流中传输值
【发布时间】:2018-02-24 14:07:27
【问题描述】:

我想创建一个可观察的
1.通过getToken2方法获取token
2.使用这个token通过flatMap获取userdata
3.将刚刚收到的userData和token(通过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');

         });
  }

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

【问题讨论】:

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


    【解决方案1】:

    flatmapmergeMap 有一个名为 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');
    
             });
    

    【讨论】:

    • 非常感谢您提供出色的解决方案。真的很有帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-19
    • 1970-01-01
    相关资源
    最近更新 更多