我想创建一个可观察的
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');
});
}
请给我解决这个问题的想法。
亲切的问候
答案 0 :(得分:2)
flatmap
或mergeMap
有一个名为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');
});