我有一个简单的方法来发出 POST 请求
postData(){
var headers = new Headers();
headers.append('Content-Type', 'application/json');
var json = JSON.stringify({email: 'Admin', password: 'Admin'});
return this._http.post('http://localhost:8080/addressbook_rest/api/v1/contacts/login', json ,
{headers: headers});
}
然后从另一个组件调用上面的方法
onLogin() {
this._service.postData().map(res => res.json()).subscribe(
data => { this.loggedin = data },
err => { console.log(err); }
);
console.log(this.loggedin);
}
问题是,在第一次调用时,变量 this.loggedin 未定义,但之后我得到了我想要的( this.loggedin=true )。我不知道为什么只有第二次才得到。
最佳答案
事实上,这是因为请求是异步处理的。这意味着 console.log(this.loggedIn);
将第一次返回 undefined,因为它位于订阅回调之外。它在收到请求响应之前执行。
你应该使用类似的东西:
onLogin() {
this._service.postData().map(res => res.json()).subscribe(
data => {
this.loggedin = data;
console.log(this.loggedin); // <-------
},
err => { console.log(err); }
);
}
关于Angular2 对 POST 请求的第一次响应未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38635621/