【问题标题】:How to dispatch multiple actions from ngrx 7 effects如何从ngrx 7效果中调度多个动作
【发布时间】:2023-03-18 02:29:01
【问题描述】:

这个想法是监听一个动作来触发这个效果,然后进行一个返回数据的服务调用。服务调用成功后,我想分派两个不同的操作。我尝试了许多在 SO 上找到的不同组合,但它们都不起作用——只有第一个动作被调度,完全忽略了第二个动作。用switchMapmergeMap 试过这个,但仍然只有第一个动作被调度。

@Effect()
    getAllShows$ = this.actions$
    .pipe(
        ofType(GetAllShowsAction.GET_ALL_SHOWS),
        switchMap((action: any) => this.showService.getAllShows(action.payload).pipe(
            mergeMap( response => { return [new GetAllShowsAction(action.payload + 1), new GetAllShowsSuccessAction(response)] },
            catchError( error => of(new GetAllShowsErrorAction()))
            )
        )
));

我的应用信息:

Angular CLI: 7.3.6
Node: 10.10.0
OS: darwin x64
Angular: 7.2.10
... animations, common, compiler, compiler-cli, core, forms
... language-service, platform-browser, platform-browser-dynamic
... router

Package                           Version
-----------------------------------------------------------
@angular-devkit/architect         0.13.6
@angular-devkit/build-angular     0.13.6
@angular-devkit/build-optimizer   0.13.6
@angular-devkit/build-webpack     0.13.6
@angular-devkit/core              7.3.6
@angular-devkit/schematics        7.3.6
@angular/cli                      7.3.6
@angular/fire                     5.1.2
@ngtools/webpack                  7.3.6
@schematics/angular               7.3.6
@schematics/update                0.13.6
rxjs                              6.4.0
typescript                        3.2.4
webpack                           4.29.0

NgRx 版本 7.3.0。

【问题讨论】:

    标签: angular typescript ngrx ngrx-effects


    【解决方案1】:

    试试这个:

    @Effect()
        getAllShows$ = this.actions$
        .pipe(
            ofType(GetAllShowsAction.GET_ALL_SHOWS),
            switchMap((action: any) => this.showService.getAllShows(action.payload)),
            switchMap(res => [
                new GetAllShowsAction(action.payload + 1),
                new GetAllShowsSuccessAction(response)
            ]),
            catchError( error => of(new GetAllShowsErrorAction()))
    );
    

    【讨论】:

    • 编译失败,因为第一个 switchMap 最多接受 2 个参数,但提供了 3 个参数(service、switchMap 和 catchError)。这就是为什么我必须首先通过管道传递该服务调用。如果这有意义?
    • 对不起,我错过了一个结束“)”
    • 你是对的!但我还必须在第二个 switchMap 中引用 action 作为上游参数,因为我需要在那里访问它的有效负载。感谢您的帮助!
    • 当然(:很高兴我能
    猜你喜欢
    • 1970-01-01
    • 2023-03-17
    • 2018-11-22
    • 1970-01-01
    • 2019-01-31
    • 2020-01-25
    • 2022-01-03
    • 2020-01-10
    • 2022-01-06
    相关资源
    最近更新 更多