我在我的PHP服务器上有一个工作后端JWT设置,我终于在几个小时后得到一个结果登录控制台的角度,我现在无法弄清楚如何管理这个结果并等待信息到加载返回结果,如果我删除我的订阅功能,我甚至无法渲染让我困惑的结果,为什么我不能简单地使用地图?
无论如何,这是我的登录功能:
login(username: string, password: string): Observable<boolean> {
let result = false;
var postData = "email=" + username + "&password=" + password;
let headers: Headers;
headers = new Headers();
headers.append('Content-Type', 'application/x-www-form-urlencoded');
this.http.post('https://callum.tech/jwt/', postData, {headers: headers})
.take(1)
.map((res:any) => res.json())
.subscribe(
data => {
console.log(data.token)
if (data.token) {
console.log("token exists");
// set token property
this.token = data.token;
// store username and jwt token in local storage to keep user logged in between page refreshes
localStorage.setItem('currentUser', JSON.stringify({ username: username, token: data.token }));
result = true;
}
},
err => {console.log(err)}
//,() => console.log("done!?")
);
console.log(result);
return Observable.of(result);
}
现在这将使用正确的信息登录(我在'token'下的PHP中返回一个json,没有问题,这在控制台中显示)
我不确定如何等待,并得到正确的响应,POST的东西似乎对订阅等非常敏感,或者它不会发布数据,所以我不知道如何处理这个
答案 0 :(得分:1)
Observable.map
只是映射已解析的响应,它不会启动请求。您始终需要使用subscribe
启动它。这就是观察者的工作方式。
此外,代码是异步的,您无法在代码段的末尾执行console.log(result);
,该行将在通过this.http.post()...
创建observable后立即运行。
有关详细信息,请参阅文档:
https://scotch.io/tutorials/angular-2-http-requests-with-observables