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。然而,不管存在的理由是什么,它都能捕捉到所有的请求,所以这就解释了一切。感谢大家的帮助。
正如标题中所说,当我订阅我的 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。然而,不管存在的理由是什么,它都能捕捉到所有的请求,所以这就解释了一切。感谢大家的帮助。