相关疑难解决方法(0)

Rxjs One Observable进入另一个

我有一个相当笨重的代码集,其中来自一个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.订阅的嵌套看起来很糟糕,我很确定有更好的方法来做到这一点.

谢谢!

observable rxjs

14
推荐指数
1
解决办法
9099
查看次数

Angular ngrx + Firebase OAuth操作被调用但效果不是

当我使用此效果注销时,我的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,看看我是否在函数中做错了,但它没有被调用一切,我也有一个catchGetUser,但是这也不能触发.

在这种情况下是否存在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

5
推荐指数
1
解决办法
293
查看次数

如何在ngrx / effect中调度多个动作?

我正在使用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)

javascript typescript ngrx angular ngrx-store

5
推荐指数
2
解决办法
6779
查看次数