Angular 2 Http没有触发

时间:2017-04-20 13:24:02

标签: javascript angular angular2-http

如标题中所述,当我订阅我的观察时,没有任何事情发生。控制台或构建期间没有错误。这是我的代码:

我的服务

  getBlueCollars(): Observable<BlueCollar[]> {
return this.http.get(this.defaultAPIURL + 'bluecollar?limit=25').map(
  (res: Response) => {
    return res.json();
  });
}

我的组件

ngOnInit() {
    this.planifRequestService.getBlueCollars().subscribe(
      data => {
        this.blueCollars = data;
        console.log('Inner Blue Collars', this.blueCollars);
      },
      err => console.log(err)
    );
    console.log('Value BlueCollars : ', this.blueCollars);
}

所以第二个console.log正在触发&#34; Value BlueCollars:Undefined&#34;,并且我的订阅中的日志永远不会显示。同时,我无法在Chrome的Networt标签中看到发送的请求。

所以我尝试使用以下代码简化所有内容:

let response: any;
this.http.get('myUrl').subscribe(data => response = data);
console.log('TestRep: ', response);

这里的问题相同,没有错误,响应未定义。似乎订阅不会触发可观察的。 (网址是正确的,它正在我的招摇或邮递员工作。)

关于Angular 2.4.9

修改

所以我试图在一个全新的项目中复制/删除我的请求代码,一切正常。请求被触发,我可以正确获取JSON响应。因此,我的项目配置可能会阻止请求正确触发。

3 个答案:

答案 0 :(得分:2)

好的,只是发现了发生了什么。我正在使用假的后端来尝试我的登录连接,它应该只捕获指定的URL。然而,对于观察者的存在,它正在捕捉所有的要求,所以解释一切。感谢大家的帮助。

答案 1 :(得分:1)

尝试在服务代码中添加一个catch块:

getBlueCollars(): Observable<BlueCollar[]> {
  return this.http.get(this.defaultAPIURL + 'bluecollar?limit=25')
  .map(
    (res: Response) => {
      return res.json();
    })
  .catch(err => Observable.throw(err))
}

别忘了

import 'rxjs/add/observable/throw';
import 'rxjs/add/operator/catch';`

我想这会导致错误,让您知道代码出错的地方。

答案 2 :(得分:0)

订阅调用之外的console.log未定义的原因是因为subscribe / http调用正在发生异步,因此,实际上,代码的顺序(及时!)跑步是:

1)观察到了observable(然后等待响应) 2)外部控制台日志运行时未定义blueCollars 3)当响应(或错误)从http请求返回时(可能在几秒钟之后),只有这样才会发生this.blueCollar = data的内部分配(以及内部控制台日志),否则将记录错误< / p>

除此之外,订阅代码看起来很好......!