RxJS: передача значений в потоке
Я хочу создать наблюдаемую, которая
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');
});
}
Пожалуйста, дайте мне идею, чтобы решить эту проблему.
С уважением
1 ответ
flatmap
или же mergeMap
имеет необязательный параметр с именем resultSelector
,
Функция для получения значения на выходе Observable на основе значений и индексов исходного (внешнего) излучения и внутреннего наблюдаемого излучения. Аргументы, переданные этой функции:
externalValue: значение, полученное из источника
innerValue: значение, полученное из прогнозируемой наблюдаемой
externalIndex: "индекс" значения, полученного из источника
innerIndex: "индекс" значения из прогнозируемой наблюдаемой
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');
});