私は現在、SQLデータベースから一連のデータをロードする必要があるWebアプリケーションを開発しています(一部の従業員や作業計画など)。コンポーネントにルーティングされるたびに、データを更新すると、サーバーに送信され、何らかの成功またはエラー メッセージが返されます。
現時点ではオブザーバブルを使用していますが、希望どおりに動作しません。オブザーバブルを購読し、データを受け取り、購読を解除します(購読を解除する場所もわかりません.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);
}
これはここでよく聞かれるかもしれません。しかし、もっと多くの投稿を読んでも違いがわからないので、私はその違いについて本当に確信が持てません. 誰かが時間をかけて私を助けてくれませんか?