2017-01-31 3 views
0

좋은 저녁 친구들angular2 http 해결 약속

나는 angular2에 빠지려고 노력 중이며, 계속 진행하지 못하는 문제가 있습니다.

서비스 :

getProject(id: number): any { 
    var url = this.ProjectsUrl + '/'+ id; 
    return this.http.get(url) 
     .toPromise() 
     .then(response => { 
     console.log(response.json().data as Project); 
     }) 
     .catch(this.handleError); 
    } 

요소 :

getProject(id:number){ 
     this.projectService 
     .getProject(id) 
     .then(project => this.project = project); 
    } 

ngOnInit()

ngOnInit() { 
    this.sub = this.route.params.subscribe(params => { 
     this.getCustomers(); 
     console.log('b4 getProj') 
     this.getProject(+params["id"]); 
     console.log('after getProj') 
    }); 
    } 

출력 :

b4 getProj 
after getProj 
Object { Project } 

약속이 왜 풀리지 않는지 이해할 수 없습니까? 어떤 팁?

+0

을 왜 뭔가가 해결되지 않습니다 생각하십니까? –

답변

0

나는 이것이 당신이 원하는 것을 추측 : Angular2와

getProject(id:number){ 
    return this.projectService // <<<=== added return 
     .getProject(id) 
     .then(project => this.project = project); 
    } 

    ngOnInit() { 
    this.sub = this.route.params.subscribe(params => { 
     this.getCustomers(); 
     console.log('b4 getProj') 
     this.getProject(+params["id"]) 
     .then(_ => console.log('after getProj')); // <<<=== changed 
    }); 
    } 
+0

답변 주셔서 감사합니다. 나는 내일 이것을 밖으로 시험해 볼 예정이다. 하지만 내가 게시 한 스 니펫이 다른 모든 HTTP 요청에 대해 왜 작동하는지 궁금해하지만?! – devphil0

+0

이것은 단지 추측입니다. 나는 당신의 질문에서 무엇이 문제인지를 알 수 없었다. –

1

한가지 좋은 점은 약속의 장소에 Observables은 그것의 지원이다. 당신이 다음 코드 아래 약속의 장소에서 Observable 인을 사용하려면 그냥 경우

을 사용할 수 있습니다

서비스 :

getProject(id: number): any { 
    var url = this.ProjectsUrl + '/'+ id; 
    return this.http.get(url) 
     .map(response => { 
     response.json().data as Project; 
     }) 
     .catch(this.handleError); 
    } 

구성 요소 : 나는 희망

getProject(id:number){ 
      this.projectService 
      .getProject(id) 
      .subscribe(project => { 
      this.project = project 
      }); 
     } 

이 도움이 .

그냥 서비스에 다음과 같은 선언을 추가해야합니다 :

import { Observable } from 'rxjs'; 
+0

감사합니다. 계속하기 전에 두 가지 방법의 차이점을 알아야 할 것 같습니다. – devphil0

+0

물론, 문제 없습니다. –