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?