Los datos de retorno de Angular 2 de RxJs se suscriben

Tengo un servicio con una función de autenticación:

authenticate(username: string, password: string) {
        let ret;
        let packet = JSON.stringify({
            username: username,
            password: password
        });

        let headers = new Headers();
        headers.append('Content-Type', 'application/json');

        this.http.post('http://localhost:5000/api/authenticate/', packet, {
            headers: headers
        })
        .map(res => res.json())
        .subscribe(
            data => { 
                // put return data into ret
                ret = data.token;
            },
            err => console.log(err),
            () => {
                // this works!
                console.log(ret);
            }
        );

        // get's returned before I put data into it
        return ret;
    }

Entonces, si llamo a la función de autenticaciónconsole.log(authenticate('a', 'b'));, registraundefined desde elret La variable se devuelve antes de que la función de suscripción pueda poner los datos en ella. ¿Cómo puedo devolver los datos de respuesta http de la función de autenticación? Nunca antes había hecho ninguna programación reactiva con RxJS y eso es lo que angular 2 parece estar usando.

PD. ¿Existe alguna solución CSP decente para javascript como go canales o core.async?

Respuestas a la pregunta(2)

Su respuesta a la pregunta