【问题标题】:ngrx effect not firing actionngrx 效果不触发动作
【发布时间】:2019-11-22 05:06:38
【问题描述】:

我对 ngrx 有疑问。在一个 Effect 内部,我在 NodeJS 中调用了一个 Backend 路由,如下所示:

@Effect() 
authSignup = this.actions$ 
    .ofType(AuthActions.TRY_SIGNUP)
    .switchMap((action: AuthActions.TrySignup) => { 
        return this.httpClient.post('nodejs_backend_route') 
        .map((response: any) => { 
            return Observable.of({ type: AuthActions.SUCCESSFUL_SIGNUP }); 
        })
    });

如果.post 内部的路由是 NodeJS 中的后端路由,则无法识别.map 内部触发的操作。我收到此错误:

“Error: Effect "AuthEffects.authSignup" dispatched an invalid action: [object Object]”

然而AuthActions.SUCCESSFUL_SIGNUP 的动作还是存在的。如果没有对后端进行调用,则该操作将完美触发。从 ngrx Effect 内部调用 NodeJS 后端是否存在问题?

谢谢!

【问题讨论】:

    标签: node.js angular ngrx


    【解决方案1】:

    试试这样:

    @Effect()
    authSignup$: Observable<AuthActions.All> = this.actions$
      .pipe(
        ofType<AuthActions.TrySignup>(AuthActions.TRY_SIGNUP),
        switchMap((action) => this.httpClient.post('nodejs_backend_route')
          .pipe(
            map((response) => new AuthActions.SuccessfulSignup(response)),
            catchError((error) => of(new AuthActions.FailedSignup(error)))
          )
        )
      );
    

    问题是您没有在map 中返回Action。我重写了它,以提示您如何使用最新版本的供应商来完成。

    【讨论】:

    • 非常感谢!您的解决方案是完美的!你从哪里得到使用管道的想法?我在ngrx教程的任何地方都没有看到过。我还没有理解这到底是如何与这些管道一起工作的。
    • 管道和操作符的导入从 RxJs 5.5 改变。查看learnrxjs.io 文档。不要忘记接受我的回答并投票;)
    • 我接受并投了赞成票。我听说了 RxJS 5.5 中的这种变化,但不认为这是我的问题所在。事实上,我设法修改了您的解决方案,但根本不使用管道!再次感谢!
    • 是的,它不在管道中,正如我所说,问题是你没有返回一个新的 Action,而是一个带有 type 属性的基本 observable。
    • Yop,mergeMap 执行一系列操作。
    猜你喜欢
    • 1970-01-01
    • 2019-07-02
    • 2019-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-14
    • 1970-01-01
    相关资源
    最近更新 更多