2016-09-20 8 views
1

나는 RXJS를 머리 속에 감싸려고하고 있으며, 약속 대신 관측 가능을 사용하여 다음 워크 플로를 처리하는 방법에 대해 빠른 질문을했습니다.여러 관찰 항목에 대한 RXJS 시퀀스

  • 제가 JWT 로컬 스토리지 보면 : 여기

    은 각 2 워크 플로 로그이다. JWT가 있으면 토큰을 반환합니다.
  • 로컬 저장소에 없으면 플랫폼을 확인합니다. Android가 Google 무기명 토큰을 사용하여 내 서버에 로그인하면 내 서버가 JWT를 반환합니다 (각도 HTTP 관측 가능을 통해).
  • 로컬 스토리지에 있지 않은 플랫폼은 Windows 컴퓨터입니다. 서버에 JWT를 생성하고 (각도 HTTP 관측 가능을 통해)
  • 두 번 서버를 호출하기 전에 로컬 기억 장치에 토큰을 캐시하기 전에 JWT 정보를 호출 함수로 리턴한다.

저는 RXJS를 사용하여이를 올바르게 수행하는 방법을 모두 모았습니다. 대부분이 모든 것을 함께 묶는 방법이 대부분입니다. Observables를 사용하여 이것을 수행하는 방법에 대한 빠른 의사 코드를 얻을 수 있습니까? 기본적으로 JWT를 가로 챈 다음 응용 프로그램에서 이동하기 전에 로컬 저장소에 저장하려고합니다 (위의 시퀀스에 가입하는 호출 함수)

도움이 될 것입니다!

답변

1

나는이 작업을 위해 비동기 함수를 선호한다.

var jwtPromise = null; 

function getJwt() { 
    return jwtPromise || (jwtPromise = getJwtNotCached()); 
} 

async function getJwtNotCached() { 
    const localJwt = getLocalJwt(); 
    if (localJwt) { 
    return localJwt; 
    } 
    const newJwt = await fetchJwtByPlatform(); 
    storeLocalJwt(newJwt); 
    return newJwt; 
} 

async function fetchJwtByPlatform() { 
    if (platformIsAndroid()) { 
    return await fetchJwtOnAndroid(); 
    } 
    return await fetchJwtOnWindows(); 
} 

... 

이 코드는 한 번에 두 번 호출하면 여러 네트워크 요청이 이루어지지 않도록합니다.

+0

응답 해 주셔서 감사합니다. 이것이 Observable을 반환하기 때문에 Angular 2 HTTP에서 작동합니까? 각도 2 HTTP 호출에 의해 반환 된 관찰에 대한 기다릴 수 있습니다? –

+0

@RickyFunkhouser 안돼,하지만 당신은 'observable.toPromise();'기다릴 수 있습니다. 그래서 observables를 반환하는 angular2에 대해 슬프다. –

+0

좋아, 적어도 관찰을 사용하여 이것을 시도해보고 어떻게 적절하게 사용하는지 알아낼 수 있습니다. 나는 약속으로이 일을 할 수 있지만, 앵귤러 2가 나를 어떻게하기를 바라는 지 돌아볼 것 같아. 내가 볼 수있는 관찰 가능한 예제의 대부분은 실제적으로 나를 돕지 않는 숫자 세트에 대한 범위 함수를 사용합니다. 여러 관찰 데이터를 단일 결과 (JWT)로 병합 할 수있는 몇 가지 예제를 찾고 싶습니다. 호출하는 함수로 돌아 오기 전에 관찰 가능한 응답을 잠재적으로 처리하는 것입니다. RXJS의 함수와 클래스는 방대하고 완전히 잃어 버렸습니다! –

관련 문제