我目前正在开发一个 Web 应用程序,它必须从 SQL 数据库(如一些员工或工作计划)加载一组数据。每次当你被路由到一个组件时,如果你更新数据,它将被发送到服务器并返回某种成功或错误消息。
目前我使用 observables,但它们的行为不像我想要的那样。我订阅了一个 observable,接收我的数据并取消订阅(我也不确定在哪里取消订阅。在 onDestroy 中还是在Complete
我的 sub 的一部分中?)。但不知何故,它仍然是异步的,因为代码执行在接收所有导致我的应用程序失败的数据之前继续执行。
这是我的实现示例:
员工组件:
getEmployees(department: any){
this.employeesSub = this.employeeManagementService.getEmployees(department).subscribe(
//Sucess
data => {this.employees = data},
//Error
err => this.logger.error(err),
//Complete
() => {this.logger.log('done loading');
}
);
}
ngOnInit(){
this.selectedDepartment = this.ccs.getSelectedDepartment();
//Does the same type of request as getEmployees()
this.getDepartments();
this.paramSub = this.route.params.subscribe(
//Success
params => {
//doStuff
}
},
//Error
err => this.logger.error(err),
//Complete
() => {}
);
}
ngOnDestroy(){
this.employeesSub.unsubscribe();
this.paramSub.unsubscribe();
}
员工服务:
getEmployees(department: string): Observable<Employee[]>{
let method = "getEmployees";
let body = JSON.stringify({method, department});
this.logger.log(body);
let headers = new Headers({ 'Content-Type': 'application/json' });
let options = new RequestOptions({ headers: headers });
return this.http.post(this.url, body, options)
.map((res:Response) =>{
this.logger.log(res.json());
return res.json();
}).catch(this.handleError);
}
我知道这可能在这里经常被问到。但是我真的不确定差异,即使我阅读越来越多的帖子我也不会明白。有人可以花点时间帮助我吗?