订阅RxJS Observable两次.获得两次响应的价值

Pio*_*rek 6 rxjs angular

假设我有一个Angular 2服务.createTokenfunction从服务器获取登录令牌:

//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());
        });
}
Run Code Online (Sandbox Code Playgroud)

我需要用我的令牌做两件事:

  1. 将它保存到本地存储(每次都会这样做,所以它应该在服务中)
  2. 在Component中对它做一些操作(显示它或其他)

为了做到这一点(据我所知,Observables),我的createToken函数必须返回Observable<>允许Component使用它来调用它的.subscribe方法对结果进行一些操作.

不幸的是,正如我从RxJS文档中看到的那样,.subscribe方法不会返回Observable<>

那我该怎么办才能调用.subscribe()方法两次呢?

JB *_*zet 17

您可以使用do()运算符:

对源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);
    });
Run Code Online (Sandbox Code Playgroud)