2017-11-23 17 views
2

2番目の観測可能な関数で1番目の観測値の出力が必要な角度2で観測可能なチェーン2をパラメータとして使用します。2番目の観測可能な値が2番目の値であるとき、angular2の観測値を2つに連鎖する方法

私はこのように観察を作成しました:

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(); 
      }) 
     }) 
     }) 
    }) 
    }); 
} 

私はこのように私のログインページで使用したい: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"); 
    }); 
} 

、私のような応答を取得しますその:

{ 
    "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

OK]をクリックして、私はあなたの最近の編集を理解したものから、それは私たちに次のように与える:

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

役割 "編集者"または "加入者"を持つユーザーがいる場合、リダイレクトが失敗することを意味しますか? –

関連する問題