2017-12-03 4 views
1

저는 Angular 4 응용 프로그램에서 Rxjs의 동작을 파악하기 위해 현재 고심하고 있습니다.Subscribe는 Rxjs의 목록 대신에 한 번에 하나의 항목을 내 보냅니다.

내 코드는 다음과 같습니다 마지막 줄에서

this.server.get("incidents") //http get resource 
.flatMap((res) => res.value) //the incident array is in a property called value of the json returned 
.map((incident) => new Incident(incident)) // conversion from json to typed class 
.subscribe(i => {this.ng2TableData.push(i);}) //subscribe 

, 내가 대신이 obsevable는 한 번에 하나의 Incident을 반환 보인다 기능을 구독의 가입 방법은 한 번 나에게 전체 목록을 제공 할 것으로 예상 N 번 호출되므로, ng2TableData을 한 번에 작성하는 대신 push 메소드를 사용해야합니다.

그 당시에 한 항목이 아닌 전체 목록을 어떻게 구독합니까?

+3

'flatMap'은 관측 가능한 값의 스트림으로 배열 값을 평평하게 할 것이기 때문에'flatMap'을 사용하지 마십시오. – Alex

+1

왜 처음에는 flatMap을 사용합니까? –

+0

그러나 평면 맵 대신 맵을 사용하는 경우 두 번째 맵에서 개별 사건보다는 전체 배열을 입력으로 사용하고 있습니다. 플랫 맵 대신 맵을 사용하여 올바른 방법으로 무엇을 할 수 있을까요? – LucaV

답변

1

flatMap은 관찰 가능한 값 스트림으로 배열을 평평하게 만듭니다. map을 사용하기 만하면됩니다. 당신과 같이 클래스의 인스턴스로 배열에서 각 개체를 만들기 위해 다시 map를 사용할 수 있습니다

this.server.get("incidents") 
    .map(res => res.value.map(incident => new Incident(incident))) 
    .subscribe(data => console.log(data)) // data is an array! 

이제 내부 대신 구독 배열을 얻는다.

+0

도움을 주셔서 감사합니다. 일단 당신이 그것을 작성했다는 것이 명백하지만, 내 머리 속에서 해결책은 중첩 된 맵 메소드가 아닌 rxjs 메소드의 연결입니다. – LucaV