假设我有一个Angular 2服务。 createToken
函数从服务器获取登录令牌:
//ANGULAR 2 SERVICE:
//login to application
createToken(email: string, password: string) {
let headers = new Headers({
'Content-Type': 'application/x-www-form-urlencoded'
});
let data = 'username=' + email + '&password=' + password + '&grant_type=password';
this.http.post(this.loginURL, data, { headers: headers })
.map(response => response.json())
.subscribe(
response => {
localStorage.setItem(this.storageTokenKey, response.access_token);
console.log("Token: " + response.access_token);
},
error => {
console.log(error.text());
});
}
我需要用令牌做两件事:
为了做到这一点(据我所知,Observables),我的createToken
函数必须返回Observable<>
以允许使用它的Component调用其.subscribe
方法来执行对结果进行一些操作。
很遗憾,as I see from RxJS documentation,.subscribe
方法无法返回Observable<>
我应该怎么做以便能够两次调用.subscribe()
方法?
答案 0 :(得分:17)
您可以使用do() operator:
对源Observable上的每个发射执行副作用,但返回与源相同的Observable。
return this.http.post(this.loginURL, data, { headers: headers })
.map(response => response.json())
.do(response => {
localStorage.setItem(this.storageTokenKey, response.access_token);
console.log("Token: " + response.access_token);
});