수색…


비고

Angular 2 Http 서비스와 RxJS로 API 요청을하는 것은 Angular 1.x에서의 약속 작업과 매우 유사합니다.

Http 클래스를 사용하여 요청하십시오. Http 클래스는 해당 메소드를 통해 HTTP 요청 GET , POST , PUT , DELETE , PATCH , HEAD 요청을 발행하는 메소드를 노출합니다. 또한 모든 종류의 HTTP 요청을 발행하기위한 일반 request 메소드를 제공합니다.

Http 클래스의 모든 메서드는 Observable<Response> 반환하며 RxJS 작업을 적용 할 수 있습니다. 관찰 가능한 스트림에서 데이터가 반환되면 .subscribe() 메서드를 호출하고 호출 할 함수를 전달합니다.

관찰 가능한 관찰 스트림에는 Response 라는 하나의 값만 포함되며 HTTP 요청이 성공적으로 완료되면 완료되거나 완료됩니다. 오류가 발생하면 오류 / 오류가 발생합니다.

참고로, Http 모듈에 의해 반환 된 관측 값은 콜드 (cold )입니다. 즉, 관측 가능 항목을 여러 번 구독하면 각 구독마다 원래 요청이 한 번 실행 됩니다. 이는 응용 프로그램의 여러 구성 요소에서 결과를 사용하려는 경우에 발생할 수 있습니다. GET 요청의 경우 약간의 추가 요청이 발생할 수 있지만 PUT 또는 POST 요청을 두 번 이상 구독하면 예기치 않은 결과가 발생할 수 있습니다.

기본 요청

다음 예제에서는 간단한 HTTP GET 요청을 보여줍니다. http.get()subscribe 메소드가있는 Observable 을 리턴합니다. 이 배열은 반환 된 데이터를 posts 배열에 추가합니다.

var posts = []

getPosts(http: Http):void {
    this.http.get(`https://jsonplaceholder.typicode.com/posts`)
        .map(response => response.json())
        .subscribe(post => posts.push(post));
}

API 요청 캡슐화

자체 처리 클래스에서 HTTP 처리 논리를 캡슐화하는 것이 좋습니다. 다음 클래스는 게시물 가져 오기 방법을 제공합니다. http.get() 메서드를 호출하고 반환 된 Observable 에서 .map 을 호출하여 Response 개체를 Post 개체로 변환합니다.

import {Injectable} from "@angular/core";
import {Http, Response} from "@angular/http";

@Injectable()
export class BlogApi {

  constructor(private http: Http) {
  }

  getPost(id: number): Observable<Post> {
    return this.http.get(`https://jsonplaceholder.typicode.com/posts/${id}`)
      .map((response: Response) => {
        const srcData = response.json();
        return new Post(srcData)
      });
  }
}

앞의 예제는 Post 클래스를 사용하여 반환 된 데이터를 보관합니다.

export class Post { 
  userId: number;
  id: number;
  title: string;
  body: string;

  constructor(src: any) {
      this.userId = src && src.userId;
      this.id = src && src.id;
      this.title = src && src.title;
      this.body = src && src.body;
  }
}

이제 구성 요소는 BlogApi 클래스를 사용하여 Http 클래스의 작동으로 자체에 관 계없이 Post 데이터를 쉽게 검색 할 수 있습니다.

여러 요청을 기다립니다.

한 가지 일반적인 시나리오는 계속하기 전에 여러 요청이 완료 될 때까지 기다리는 것입니다. 이것은 forkJoin 메소드를 사용하여 수행 할 수 있습니다.

다음 예제에서는 forkJoin 을 사용하여 Observables 를 반환하는 두 개의 메서드를 호출합니다. Observable이 완료되면 .subscribe 메소드에 지정된 콜백이 호출됩니다. 에서 제공하는 매개 변수 .subscribe 호출에 지정된 순서와 일치 .forkJoin . 이 경우 첫 번째 poststags 됩니다.

loadData() : void {
    Observable.forkJoin(
        this.blogApi.getPosts(),
        this.blogApi.getTags()
    ).subscribe((([posts, tags]: [Post[], Tag[]]) => {
        this.posts = posts;
        this.tags = tags;
    }));
}


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow