Angular 2 Http 获取未触发

Angular 2 Http get not triggering

正如标题中所说,当我订阅我的 observable 时,什么也没有发生。控制台或构建过程中没有错误。这是我的代码:

我的服务

  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 是用 "Value BlueCollars : Undefined" 触发的,我订阅的日志从未显示。同样,我在 Chrome 的网络选项卡中看不到发送的请求。

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

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

同样的问题,没有错误,响应未定义。订阅似乎没有触发可观察的。 (URL 是正确的,它在我的招摇上或与邮递员一起工作。)

我在 Angular 2.4.9

编辑

所以我尝试 copy/past 我在一个全新项目上请求的代码,一切正常。请求被触发,我可以正确得到 JSON 响应。因此,我的项目配置中可能有些东西禁止请求正确触发。

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

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

除此之外,订阅代码看起来还不错...!

尝试在您的服务代码中添加一个 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';`

我想这会导致错误,让您了解代码哪里出错了。

好的,刚刚发现发生了什么。我正在使用一个假的后端来尝试我的登录连接,该连接应该只捕获指定的 URL。然而,不管存在的理由是什么,它都能捕捉到所有的请求,所以这就解释了一切。感谢大家的帮助。