API 从 Angular 服务内部调用时调用 returns 空对象
API call returns empty object when called from inside Angular service
只有当我订阅从 Angular 服务内部进行 api 调用的函数时,我才会得到这个,所以订阅该函数的对象是空的。这是我的服务中的代码片段:
getSchedules(): Observable<Schedule[]> {
this.http.get<TempSchedules[]>(this.apiUrl).subscribe(x => this.temp = x);
this.temp.forEach((e, i) => {
// Do something, this loop is never executed because this.temp is empty
});
// Some processing here
return something; }
这是我在服务中某处的 http.get 函数:
getTempSchedules(): Observable<TempSchedules[]> {
return this.http.get<TempSchedules[]>(this.apiUrl);
}
从上面,this.temp是空的。这是为什么?
我在服务构造函数中调用了上面的函数
constructor(private http:HttpClient) {
this.getTempSchedules().subscribe(x => this.temp = x);
}
这是调用服务中该函数的组件的代码片段:
ngOnInit(): void {
this.scheduleService.getTempSchedules().subscribe(x => this.tempSchedules = x);
}
该组件工作正常,所以当我在 html 中使用值 this.tempSchedules 时,它会正确显示。我在这里错过了什么?
它不起作用,因为您没有了解 observable 的工作方式。它是异步过程,您需要在订阅块中才能获取它。如果您想在将响应返回给组件之前对响应做一些时髦的事情,那么您应该使用 map
getTempSchedules(): Observable<Schedule[]> {
return this.http.get<TempSchedules[]>(this.apiUrl)
.pipe(map(res => {
return res.forEach(() => {
// Do something, this loop will be executed
})
})) }
在组件中使用它作为 :
ngOnInit(): void {
this.scheduleService.getTempSchedules().subscribe(x => this.tempSchedules = x);
}
只有当我订阅从 Angular 服务内部进行 api 调用的函数时,我才会得到这个,所以订阅该函数的对象是空的。这是我的服务中的代码片段:
getSchedules(): Observable<Schedule[]> {
this.http.get<TempSchedules[]>(this.apiUrl).subscribe(x => this.temp = x);
this.temp.forEach((e, i) => {
// Do something, this loop is never executed because this.temp is empty
});
// Some processing here
return something; }
这是我在服务中某处的 http.get 函数:
getTempSchedules(): Observable<TempSchedules[]> {
return this.http.get<TempSchedules[]>(this.apiUrl);
}
从上面,this.temp是空的。这是为什么?
我在服务构造函数中调用了上面的函数
constructor(private http:HttpClient) {
this.getTempSchedules().subscribe(x => this.temp = x);
}
这是调用服务中该函数的组件的代码片段:
ngOnInit(): void {
this.scheduleService.getTempSchedules().subscribe(x => this.tempSchedules = x);
}
该组件工作正常,所以当我在 html 中使用值 this.tempSchedules 时,它会正确显示。我在这里错过了什么?
它不起作用,因为您没有了解 observable 的工作方式。它是异步过程,您需要在订阅块中才能获取它。如果您想在将响应返回给组件之前对响应做一些时髦的事情,那么您应该使用 map
getTempSchedules(): Observable<Schedule[]> {
return this.http.get<TempSchedules[]>(this.apiUrl)
.pipe(map(res => {
return res.forEach(() => {
// Do something, this loop will be executed
})
})) }
在组件中使用它作为 :
ngOnInit(): void {
this.scheduleService.getTempSchedules().subscribe(x => this.tempSchedules = x);
}