2017-01-17 8 views
1

다음 시나리오를 직면하고 있습니다. http (를) 통해 액세스 할 수있는 REST 백엔드에 연결되어있는 각도 (2)로 작성된 프런트 엔드 앱이 있습니다. 사용자가 전자 메일 및 pwd를 사용하여 로그인하면 백엔드는 사용자와 관련된 데이터, 특히 사용자와 연결된 ID (사용자 ID)와 그가 거주하는 지역의 코드를 반환합니다 (let 's 지역 번호). 사용자 ID 사용자가 속한 그룹의 ID를 가져 오도록 Back End를 질의 할 수 있습니다 (affinityId). 마지막으로 affinityIdregionId을 사용하여 백엔드에서 할인을 검색하여 사용자에게 적용 할 수 있습니다. 즉각도 HTTP 요청 연결

이, 백 엔드는 3 API를 제공합니다

  • 있는 getUserData (이메일 : 문자열 PWD : 문자열) : userId를
  • getAffinityPerUser을 regionId 포함한 모든 사용자 데이터를 반환 (userId를 : number) : affinityId를 나타내는 숫자를 반환합니다.
  • getDiscount (regionId : number, affinityId : number) : 디스크를 나타내는 숫자를 반환합니다. ount

내가

  • 있는 getUserData 각도 HTTP 클라이언트를 통해 이러한 API 내가 (자바 스크립트 의사 코드의 일종) 다음 API를 구축 할 수 있습니다에 액세스하는 경우 (이메일 : 문자열 PWD : 문자열) : 관찰 가능한을 (< {userId를, regionId, ...}>)
  • getAffinityPerUser (userId를 : 숫자) 관측 가능한()
  • getDiscount (regionId : 수 affinityId : 숫자) 관찰 가능한()
  • ,

RxJs 연산자를 사용하여 Observables를 결합하여 할인 정보 정보를 얻을 수 있는지 알고 싶습니다.

나는

this.getUserData(email, pwd) 
    .switchMap(userData => this.getAffinityPerUser(userData.userId)) 

같은 것을 함께 affinityId를 얻을 수 switchMap를 통해 처음 2 API를 연결할 수 있습니다하지만 난 affinityId 관찰 가능한 (getAffinityPerUser에 의해 반환)을 결합하는 방법을 모른다 userData Observable (getUserData에서 반환)은 affinityIdregionId을 모두 가질 수 있도록 getDiscount API를 호출해야합니다.난 당신이 감지하고`affinityId`와`regionId`가에서 사용할 수있는 경우 준수해야 할 생각

this.getUserData(email, pwd) 
    .switchMap(userData => this.getAffinityPerUser(userData.userId) 
           .map(affinity => [affinity, userData.regionId])) // return a tuple combining required elements 
    .switchMap(([affinity, regiondId) => this.getDiscount(regionId, affinity)) // use destructuration to extract the 2 elements of the tuple 
+0

:

어떤 도움을 아주 많이 당신은이 같은 모든 작업을 결합 할 수 있습니다 –

답변

2

을 감사합니다 마지막 Http 호출로`할인`을 검색 할 것이다. 따라서 사용자가 로그인 할 때 이러한 호출을 관찰 한 다음 가지고있는 모든 데이터가있을 때 마지막으로 호출 할 수 있습니다.
+0

좋은 것, 잘 작동해야합니다. –