2016-06-27 3 views
3

기본적으로 요소 목록이있는 구성 요소가 있으며 새 요소를 편집하거나 추가 할 수있는 세부 구성 요소가 있습니다.비동기 HTTP 요청 순서

HTTP 서비스 (this.myservice는문서의 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