我正在使用AngularFire2构建一个小型Angular聊天应用程序。
用户注销后,由于身份验证错误,使用AngularFire的.stateChanges()
和.valueChanges()
方法的所有NGRX效果都将完成。注销后如何保持效果“活跃”?
我已经尝试过将RXJS操作符takeUntil
与某种auth Observable结合使用,以反映用户是否已登录。takeWhile
也是一样。我已经尝试将catchError
作为最后一个运算符,并在pipe()
方法之后在一个额外的firestoreService.getUserFriends
中进行了尝试。
NGRX效果:
@Effect()
query$ = this.actions$.pipe(
ofType<Query>(SocialActionTypes.Query),
withLatestFrom(this.store$),
map(([action, storeState]) => {
return storeState.auth.user.uid;
}),
exhaustMap(uid => this.firestoreService.getUserFriends(uid)),
mergeMap(actions => actions),
map(action => {
return {
type: `[Social] Friend ${action.type}`,
payload: {
...action.payload.doc.data(),
id: action.payload.doc.id
}
};
})
);
firestoreService.getUserFriends方法:
getUserFriends(uid: string) {
return this.afStore
.collection<Friend>(`social/${uid}/friends`)
.stateChanges();
}