2016-08-18 53 views
1

私はangular2と@ ngrx/storeでアプリを作っています...私はrxjsを初めて使っていて、反応的な方法で考えています...観察可能な方法チェイン。リクエストが成功したとき角度2のrxjs - 観測可能なストリームを連鎖する方法

私は認証効果を持っている...現在、私が何をしたいのか

@Effect() authenticate$ = this.updates$ 
.whenAction(AuthActions.AUTHENTICATE_REQUEST) 
.switchMap(update => this.api.post('/authenticate', update.action.payload) 
    .map((res:any) => this.authActions.authenticateSuccess(res.json())) 
    .catch((err:any) => Observable.of(this.authActions.authenticateError(err))) 
); 

のように見えることはチェーン2つの余分なアクションです。

  1. this.router.navigate(['/'])で成功した後、「ホーム」ページに移動します。 localStorageサービスで
  2. ストアの資格情報this.authService.store(credentials)

私がストリームに中にこれらのアクションを組み込むために何が必要ですか?最後の2文の実行順序は、あなたがする必要があるすべてはあなたの現在の文の末尾に

.flatMap(() => 
{ 
    this.router.navigate(['/']); 
    this.authService.store(credentials); 
}); 
+0

あなたはauthenticateSuccessアクションをディスパッチしているので、別のエフェクトでこれを処理する必要があります。これは、複数の認証方法がある場合に特に役立ちます。 – j2L4e

答えて

1

このような成功のアクションに反応する別の1:

@Effect({dispatch: false}) authenticateSuccess$ = this.updates$ 
.whenAction(AuthActions.AUTHENTICATE_SUCCESS) 
.do(credentials => { 
    this.router.navigate(['/']); 
    this.authService.store(credentials); 
}); 

{dispatch: false}「は、このアクションに反応するが、別のものを送信しない」を意味します。

+0

ありがとう...ありがとう、それは行きます。それは.switchMapの後ですか?またはキャッチ後? – markstewie

+0

はい、その後に.switchMap – hholtij

+0

した後にタイプスクリプトのエラーが発生しました... ''()=> void型の引数は、 '(値:アクション、インデックス:数値)型のパラメータに代入不可=>サブスクライブ可能<{}> |約束<{}> | ArrayLike <{}> '.' – markstewie

0

ベストソリューションは、このようなあなたのeffectを維持し、追加することですが追加され、無関係であると仮定すると

関連する問題