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

时间:2016-08-21 10:18:53

标签: angular rxjs

假设我有一个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());
        });
}

我需要用令牌做两件事:

  1. 将其保存到本地存储(每次都会完成,因此应该在服务中)
  2. 在Component中进行一些操作(显示它或其他)
  3. 为了做到这一点(据我所知,Observables),我的createToken函数必须返回Observable<>以允许使用它的Component调用其.subscribe方法来执行对结果进行一些操作。

    很遗憾,as I see from RxJS documentation.subscribe方法无法返回Observable<>

    我应该怎么做以便能够两次调用.subscribe()方法?

1 个答案:

答案 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);
    });