У меня есть служба с функцией аутентификации -
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 returned before I put data into it
return ret;
}
Поэтому, если я вызываю функцию аутентификации console.log(authenticate('a', 'b'));
, она регистрирует undefined
, так как переменная ret
возвращается до того, как функция подписки может поместить в нее данные. Как я могу вернуть данные ответа HTTP из функции аутентификации? Я никогда не делал никаких реактивных программ с RxJS раньше и что то, что использует angular 2.
PS. Есть ли приличное решение CSP для javascript, например, каналы go или core.async?