如标题中所述,当我订阅我的观察时,没有任何事情发生。控制台或构建期间没有错误。这是我的代码:
我的服务
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响应。因此,我的项目配置可能会阻止请求正确触发。
答案 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>
除此之外,订阅代码看起来很好......!