私のアプリケーションのngrxエフェクトに問題があります。私は基本的にルータストアのgo()
を使ってナビゲートするのに、concatMap()
とを使って複数のアクションを実行しようとしています。ここでアクションの配列をディスパッチすることも、ngrxエフェクトからナビゲートすることもできますか?
が有効です:
@Effect()
loadPersonalInfoAndSignin$: Observable<Action> = this.actions$
.ofType(session.ActionTypes.LOAD_PERSONAL_INFO)
.map((action: LoadPersonalInfoAction) => action.payload)
.do(sessionToken => {
localStorage.setItem('authenticated', 'true');
localStorage.setItem('sessionToken', sessionToken);
})
.switchMap(() => this.userAccountService
.retrieveCurrentUserAccount()
.concatMap(currentUserAccount => [
new LoadUserAccountAction(currentUserAccount),
new SigninAction(),
new LoadMessagesAction({})
])
)
.mapTo(go(['/dashboard']));
私は.mapTo(go(['/dashboard']))
を削除する場合は、concatMap
アレイ内のすべての3つのアクションが成功し、それに対応する効果に派遣されています。私mapTo(go(...
が
...それに対応する効果に派遣されていない(すなわちSigninAction
& LoadMessagesAction
)配列の最後の2つのアクションを起こしている理由
私は、したがって、疑問に思って誰かが助けてくださいことはできますか?
編集:次のようにdo
にmapTo
を変更:次のエラーで
.do(go(['/dashboard']));
結果:go
コールのためdo
を使用して
ERROR in /Users/julien/Documents/projects/bignibou/bignibou-client/src/app/core/store/session/session.effects.ts (55,9): Argument of type 'Action' is not assignable to parameter of type 'PartialObserver<SigninAction>'.
Type 'Action' is not assignable to type 'CompletionObserver<SigninAction>'.
Property 'complete' is missing in type 'Action'.
があなたの代わりに '' mapTo'のdo'を使用してみましたか? – olsn
いいえ。私が試してみましょう。 – balteo
あなたの提案を考慮に入れて投稿を編集しました。 – balteo