В настоящее время я разрабатываю веб-приложение, которое должно загружать набор данных из базы данных SQL (например, некоторых сотрудников или рабочие планы). Каждый раз, когда вы направляетесь к компоненту и обновляете данные, они будут отправлены на сервер и вернут какое-то сообщение об успехе или ошибке.
На данный момент я использую наблюдаемые, но они ведут себя не так, как я хочу. Я подписываюсь на наблюдаемое, получаю свои данные и отписываюсь (я тоже не знаю, где отписаться. В onDestroy или в части Complete
моего подписчика?). Но каким-то образом он все еще асинхронен, поскольку выполнение кода продолжается до получения всех данных, что вызывает сбои в моем приложении.
Вот пример моей реализации:
Компонент сотрудника:
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);
}
Я знаю, что это, возможно, часто спрашивали здесь. Но я действительно не уверен в разнице, даже если я буду читать все больше и больше сообщений, я не получу ее. Может ли кто-нибудь занять некоторое время и помочь мне?