Angular2 对 POST 请求的第一次响应未定义

标签 angular http-post

我有一个简单的方法来发出 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/

相关文章:

javascript - Angular 2 : How to capture when browser restore/maximize

python - tastypie 和 django 测试用例

c# - Java 与 C# 带有 JSON 数据的 HTTP 请求

c# - 使用 HttpClient 通过 GET 连接到 WebApi 时出现 404 错误

angular - 无法读取空 Jasmine Angular 2 的属性 'injector'

node.js - ng new my-app 意外 token =

选择下拉选项后,Angular Material Autocomplete observable 会触发额外的时间

javascript - 在 Angular 2 项目中添加 .js 脚本

javascript - 在 Javascript 中获取要 POST 的表单

java - Android:无法发送http post