2016-06-27 12 views
3

基本的には、要素のリストを持つコンポーネントがあり、新しい要素を編集または追加できる詳細コンポーネントがあります。非同期HTTPリクエストの順序

httpサービス(this.myserviceはドキュメントhttps://angular.io/docs/ts/latest/tutorial/toh-pt6.htmlのhero.service.tsに基づいています)を介して要素を追加した後、私のサーバーに送信します。それから要素の要素のリストに直接ジャンプします。

私はZoneを使用しているので、ngOnInitが呼び出されます。 Angular 2 ngOnInit not called

問題は、かなりの頻度で要素のリストが新しい要素で更新されていないことです。私は、非同期HTTPリクエストの順序が混ざり合っていると思います。

どのように優れたソリューションが見えますか?

export class DetailElemComp { 
    this.myService.addElem(this.elem) 
     .subscribe(
     error => this.errorMessage = <any>error); 
    this.zone.run(() => this.router.navigate(['ListComponent'])); 
} 
export class ListOfElemComp { 
    ngOnInit() { 
     this.myService.getElems() 
      .subscribe(
      elems => this.elems = elems, 
      error => this.errorMessage = <any>error); 
    } 
} 

答えて

4

あなたの言ったように、それは非同期要求です。そうでない場合は、コールバックの前に実行されることsubscribeコールの下

export class DetailElemComp { 
    this.myService.addElem(this.elem) 
     .subscribe(
     data => null, 
     error => this.errorMessage = <any>error, 
     () => this.zone.run(() => this.router.navigate(['ListComponent'])) 
    ); 
} 

コード:あなたは、要求が完了した後に何かをしたいのであれば、私はそうのようなsubscribe機能のonCompletedコールバックラムダにそのロジックを移動することをお勧めしたいですsubscribeの方法で行います。

+0

ありがとうございます。あなたのソリューションは非常にきれいでシンプルです。 – Johannes

関連する問題