Pregunta Suscríbete RxJS Observable dos veces. Obtener el valor de la respuesta dos veces


Supongamos que tengo un servicio Angular 2. createToken La función obtiene log to token del servidor:

//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());
        });
}

Necesito hacer dos cosas con mi token:

  1. Guárdelo en el almacenamiento local (lo cual se hará cada vez, por lo que debe estar en servicio)
  2. Haga algunas operaciones en Component (visualícelo o lo que sea)

Para hacer esto (por lo que entiendo a Observables), mi createToken la función tiene que regresar Observable<> para permitir que el componente que lo usará llame a su .subscribe método para hacer algunas operaciones en el resultado.

Desafortunadamente, Como veo en la documentación de RxJS, .subscribe método no regresa Observable<>

¿Qué debería hacer entonces para poder llamar .subscribe() método dos veces?


5
2017-08-21 10:18


origen


Respuestas:


Puedes usar el do () operador:

Realice un efecto secundario para cada emisión en la fuente observable, pero devuelva un observable que sea idéntico a la fuente.

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

16
2017-08-21 10:23