2017-12-22 12 views
0

비동기식 요청을 만들기 위해 비동기/대기 모드로 어떻게 사용할 수 있습니까? 예를 들어 postDataToServer(myData) 함수를 호출하고 getDataFromServer() 콜을 해결 한 후에야? 나는 예제를 읽었지만 아직 이해하지 못했고, 하나의 http 요청을 만드는 기본적인 예제와 첫 번째 요청이 끝난 후에 다른 예제가 많이 도움이된다.비동기 프로그래밍 각도

편집 : http 요청이 observables를 반환하지 않습니다. 아마도 async/await가 올바른 선택이 아니겠습니까?

답변

2

당신이 다음 Http 또는 HttpClient을 고소하는 경우 글쎄, postget 방법을 반환하는 observable은 당신이 subscribe 수있는 콜백 항상 비동기 실행됩니다합니다.

this.http.post(url, body).subscribe(
    (res) => { 
     // you can just simply call another function which will make request 
     this.getData(); 
     // or just make another request 
     this.http.get(url).subscribe(...); 

    } 


private getData() { 
    this.http.get(url).subscribe(...) 
} 
+0

당신이 하나 개의 요청 후 다른 요청 후 쓰기 조각을 쓸 수를 ? 나는 HTTP를 사용하고있다. – Zachscs

+0

@ZacharySchwatz 지금보십시오. 기본적으로 'Observable'은 '비동기식'을 해결하고 있습니다. 하지만 '동기식'으로 만들려면 'Observable'을 'Promise'로 변환하면됩니다. –

2

이건 정말 응용 프로그램의 구조에 따라 달라집니다,하지만 당신은이 일을 async/await을 사용할 수

async postAndGetData() { 
    await this.http.post(postUrl, postData).toPromise(); 
    return this.http.get(getUrl).toPromise(); 
} 

나는 그것이를 반환하는 당신의 post 요청에 대한 이해한다고 말할 것이다 필요한 데이터이므로 후속 요청을 생성 할 필요가 없습니다.


관찰 가능한에서 데이터를 보유하고 서비스를하고 비동기 파이프를 사용하는 것이 작업을 수행하는 또 다른 방법 :

<!-- template --> 
{{ postService.data | async }} 

@Injectable() 
export class PostService { 
    data = new Subject; 
    constructor(private http: HttpClient) { } 

    loadData() { 
    this.http.get(getUrl).map(response => data.next(response)); 
    } 
    postDataToServer(myData) { 
    this.http.post(postUrl, myData).switchMap(() => this.loadData()); 
    } 
}