2017-11-23 5 views
2

첫 번째 관측 가능 함수의 출력이 두 번째 관찰 가능 함수에서 매개 변수로 필요한 각도 2에서 관측 가능한 체인 2를 원합니다.angle2에서 관측 가능한 두 개의 관측치를 만드는 방법

은 내가 관찰과 같이 만들었습니다, 내가 좋아하는 응답을 얻을 것이다 otpVerify에서 여기

login(form: any, event: Event): void { 
    this.authService.otpVerify(form) 
    .switchMap((data) => this.authService.storeData(data)) 
    .subscribe(response => { 
     if(this.navCntrl.canGoBack()) 
      this.navCntrl.pop(); 
     else 
      this.navCntrl.setRoot('TabsPage'); 
    }, (err)=>{ 
      console.log("your credentials doesn't match"); 
    }); 
} 

을 :

storeData(response: any): Observable<any> { 
    return Observable.create((observer) => { 
    // storing the data in localstorage 
    this.storage.ready().then(() => { 
     this.storage.set('USERACCESSTOKEN', response.token).then(() => { 
     this.storage.set('USERROLE', response.user_role).then(() => { 
      delete response.token; 
      this.storage.set('USERDATA', response).then(() => { 
      this.setLoggedIn(true); 
      observer.complete(); 
      }) 
     }) 
     }) 
    }) 
    }); 
} 

내가 이렇게 내 로그인 페이지에서 사용하고자하는 그 :

{ 
    "success" : true, 
    "message" : "Login success", 
    "token"  : "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJod…n19fQ.EMMT6wJeoF7Y52c3UQzgw3rkTY0WduGYq...........", 
    "name"  : "Jony", 
    "user_role" : "editor" 
} 

여기 정확한 신임 확인을 마친 후 user_role도 확인하고 싶습니다. user_role이 응답에서 (편집자 또는 구독자)와 일치하면 switchMap((data) => this.authService.storeData(data)) 블록으로 이동합니다. 이 역할은 허용되지 않습니다. 대화 상자 & 데이터도 저장되지 않습니다. [나는이 논리를 여기에 추가하지 않았습니다. 어떻게 해야할지 모르겠습니다. 그러나 이것은 내가 찾고있는 것이다.] AuthService에서

otpVerify 기능은 그 같은 것입니다 :

otpVerify(body: any): Observable<any> { 
    let headers = new Headers(); 
    headers.append('Content-Type', 'application/json'); 
    this.options = new RequestOptions({ headers: headers }); 
    return this.http.post(AppSettings.API_ENDPOINT2 + 'login', body, this.options) 
    .map(response => response.json()) 
    .catch(this._errorHandler); 
} 

이 OTP 검증 후, 나는 그것이 유효한 사용자인지 것을 볼 수도 조건을 넣고 싶다. 모든 것이 잘되면 데이터를 저장하고 오류 메시지를 표시합니다. 이 문제를 해결하도록 도와주세요.

+0

그래서'login' 메소드를 변경하여 일을 제대로하고 싶습니까? –

+0

예 @AdrienBrunelat –

+0

현재 코드가 정확히 무엇입니까? 나는 각성 환경을 설정하지 않았으며 오직 머리로 당신을 도울 것입니다. –

답변

0

좋아, 내가 최근 편집의 이해 것과, 그 다음 우리에게 줄 것이다 :

login(form: any, event: Event): void { 
    this.authService.otpVerify(form) 
    .switchMap(
     (data: any) => { 
     if (data.user_role === "editor" || data.user_role === "subscriber") { 
      return this.authService.storeData(data); 
     } else { 
      console.log("Insufficient privileges"); 
     } 
     }, 
     (err) => console.log(err)) 
    .subscribe(() => { 
     if (this.navCntrl.canGoBack()) { 
     this.navCntrl.pop(); 
     } else { 
     this.navCntrl.setRoot('TabsPage'); 
     } 
    }); 
} 

switchMap 내부의 코드는 역할을 확인하고 권한이 충분한 경우에만 storeData 호출합니다.

+0

일하는 완벽한 선생님, 그러나 모르겠지만 왜 블록을 구독하지 않을 것입니다. –

+0

페이지가 전에만 리디렉션됩니다. –

+0

"편집자"또는 "구독자"역할을 가진 사용자가 있으면 리디렉션이 실패 함을 의미합니까? –