2016-08-11 2 views
1

다음 구성 요소를 만들었고 작은 데모가있어서 별도의 서비스를 만드는 대신 여기에서 서비스를 사용하고 있습니다. 여기 angular2에서 http 서비스를 올바르게 사용하는 방법은 무엇입니까?

export class AppComponent {  
    @Input() takeInput:string; 
    @Output() result; 
    constructor(private http: Http) { }; 

    public onSubmit(value: any){ 
     this.takeInput = value; 

     this.getAll(value.url); //below console.log prints first then the one prints which is written inside this getAll method. 

     console.log("this prints first", this.result); //returns undefined 
     //How do I use this.result here which gets set once getAll() execution is finished. 
    } 

데이터 서비스를 호출하고 얻을 수있는 방법입니다 :

private getAll (url){ 
    return this.http.get(url) 
     .map((res: Response) => res.json()) 
     .subscribe((res: Object) => { 
      this.result = res; 
      console.log("this prints second",this.result); // returns proper response 
     }); 
    } 
} 

에 데이터를 반환하고 내 호출 방법 onSubmit에서 해당 데이터를 사용하는 것이 관찰() 또는 다른 방법을 기다릴 수있는 방법 this.result를 다른 메소드의 매개 변수로 사용하여 실행을 계속하십시오.

답변

1

이 해당 관찰에 가입을 이동하는 것처럼 당신은 당신의 getAll 방법을 리팩토링 수 :

private getAll(){ 
    let url = "https://something"; 
    return this.http.get(url) 
    .map((res: Response) => res.json()); 
    } 
} 

과 같이 사용 :

public onSubmit(value: any){ 
    this.takeInput = value.takeInput; 
    this.getAll().subscribe(result => { 
    console.log(result); 
    this.result = result; 
    console.log(this.result); 
    }); 
} 
+0

을 여전히 asyc 코드 실행 지속적이고 내가 할 this.result = 다음 행에서 정의되지 않음. 'public onSubmit (값 : any) { this.takeInput = value.takeInput; this.getAll(). subscribe (결과 => { console.log (myResult); // 데이터를 반환 함 console.log (this.result); // 데이터를 반환 함 }); 데이터 서비스에서 가져온 및 } ' –

+0

죄송 예 따라서 정의되지 않은 전에 } 공공 otherMethod (this.result) =이> { 을 console.log (this.result는) // 실행! 내 코드에 오타가 있었는데 ... 내 대답을 업데이트했습니다. –

+0

당신은 한 번 봐 주시겠습니까? 나는 고통 점에 초점을 맞추기 위해 질문을 간소화했습니다. –

관련 문제