我有一个相当笨重的代码集,其中来自一个observable的数据被输入另一个,如:
let source = this.myService.getFoo()
.subscribe(result => {
let source2 = this.myService.getMoo(result)
.subscribe(result2 => { // do stuff });
});
Run Code Online (Sandbox Code Playgroud)
我知道有很多方法可以组合和链接,但是我需要将来自源的数据输入source2.订阅的嵌套看起来很糟糕,我很确定有更好的方法来做到这一点.
谢谢!
当我使用此效果注销时,我的oauth设置存在问题:
@Effect()
logout: Observable<Action> = this.actions.ofType(UserActions.LOGOUT)
.switchMap(() => Observable.of(this.afAuth.auth.signOut()))
.map(() => new UserActions.GetUser())
.catch(err => Observable.of(new UserActions.AuthError({error: err.message})));
Run Code Online (Sandbox Code Playgroud)
一切正常,UserActions.GetUser()正在被召唤.现在,如果我尝试使用此效果和此firebase auth函数登录:
@Effect()
googleLogin: Observable<Action> = this.actions.ofType(UserActions.GOOGLE_LOGIN)
.switchMap(() => Observable.fromPromise(this.loginWithGoogle()))
.map(() => new UserActions.GetUser())
.catch(err => Observable.of(new UserActions.AuthError({error: err.message})));
private loginWithGoogle() {
return this.afAuth.auth.signInWithPopup(new firebase.auth.GoogleAuthProvider());
}
Run Code Online (Sandbox Code Playgroud)
新的UserActions.GetUser()被调用,我可以在Redux DevTools中看到它,但实际的效果没有被调用,我在那里放了很多console.log,看看我是否在函数中做错了,但它没有被调用一切,我也有一个catch在GetUser,但是这也不能触发.
在这种情况下是否存在firebase的问题或者我是愚蠢的?
操作:
获得用户效果:
@Effect()
getUser: Observable<Action> = this.actions.ofType(UserActions.GET_USER)
.switchMap(() => {
console.log('test'); // <-- Not called
return this.afAuth.authState;
})
.map(()=> {
return new UserActions.Authenticated();
});
Run Code Online (Sandbox Code Playgroud)
** …
observable firebase-authentication ngrx ngrx-effects angular
我正在使用Angular 6,ngrx / store。我有负责更新事物的效果。取决于某些逻辑,我想调度不同的操作。如果我使用switchMapinsted of有map什么区别?
这是我尝试过的,但是不起作用:
@Effect()
dispathMultipleActions$ = this.actions$.pipe(
ofType(ActionTypes.UpdateSomething),
map(() => {
const actions: Action[] = [];
const array = [1, 2, 3, 4, 5];
array.forEach(item => {
if (item > 3) {
actions.push(new DeleteAction(item));
} else {
actions.push(new ChangeAction(item));
}
});
return actions;
})
);
Run Code Online (Sandbox Code Playgroud) angular ×2
ngrx ×2
observable ×2
javascript ×1
ngrx-effects ×1
ngrx-store ×1
rxjs ×1
typescript ×1