Angular 2 возвращает данные от подписчиков RxJ

У меня есть сервис с функцией аутентификации -

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

Так что, если я вызову функцию аутентификацииconsole.log(authenticate('a', 'b'));, это логиundefined так какret переменная возвращается до того, как функция подписки сможет поместить в нее данные. Как я могу вернуть данные ответа http из функции authenticate? Я никогда раньше не занимался реактивным программированием с RxJS, и именно это, похоже, использует angular 2.

PS. Есть ли достойное решение CSP для javascript, как go каналы или core.async?

Ответы на вопрос(2)

Ваш ответ на вопрос