我的AuthService中具有以下功能:
getToken() {
this.http.post('myAuthEndpoint', { credentials })
.subscribe((res) => {
const token = res.headers.get('Authorization')
localStorage.setItem('id_token', token);
});
}
我想从
getToken()
返回在.subscribe
中返回的实际令牌值。有没有办法做到这一点? 最佳答案
如果在令牌可用时需要采取其他措施,则可以执行以下操作:
getToken() {
return this.http.post('myAuthEndpoint', { credentials })
.map((res) => {
const token = res.headers.get('Authorization')
return token;
})
.do((token) => {
localStorage.setItem('id_token', token);
});
}
// some other part of app
authService.getToken()
.switchMap((token) => {
// perform any desired action
})
.subscribe((result) => ...);
但是请注意,在这种情况下,在没有后续
getToken()
的情况下调用subscribe
不会执行任何操作。回答评论
您有两种服务,一种提供令牌,另一种使用令牌:
export class AuthService {
private tokenSource = new ReplaySubject(1);
private token$ = this.tokenSource.asObservable();
constructor(private http: Http) {
return this.http.post('myAuthEndpoint', { credentials })
.map((res) => {
let token = res.headers.get('Authorization')
return token;
})
.do((token) => {
localStorage.setItem('id_token', token);
})
.subscribe(this.tokenSource);
}
getToken() {
return this.token$;
}
}
export class RecentPhotosService {
constructor(private authService: AuthService) {
this.authService.getToken()
.switchMap(token => {
return this.getRecentPhotos(token);
})
.subscribe(photos => {...});
}
...
}
关于javascript - 有没有办法将数据从我的angular2服务中的.subscribe传递出去?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41273599/