Angular 如何从ngrx 7效果中调度多个动作

Angular 如何从ngrx 7效果中调度多个动作,angular,typescript,ngrx,ngrx-effects,Angular,Typescript,Ngrx,Ngrx Effects,其思想是监听一个动作来触发此效果,然后进行一个返回数据的服务调用。当服务调用成功后,我想分派两个不同的操作。我已经尝试了许多不同的组合,但都不起作用——只有第一个动作得到调度,完全忽略了第二个动作。尝试使用switchMap、mergeMap执行此操作,但仍然只有第一个操作被调度 @Effect() getAllShows$ = this.actions$ .pipe( ofType(GetAllShowsAction.GET_ALL_SHOWS),

其思想是监听一个动作来触发此效果,然后进行一个返回数据的服务调用。当服务调用成功后,我想分派两个不同的操作。我已经尝试了许多不同的组合,但都不起作用——只有第一个动作得到调度,完全忽略了第二个动作。尝试使用switchMap、mergeMap执行此操作,但仍然只有第一个操作被调度

@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版。

尝试以下操作:

@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作为上游的一个参数引用,因为我需要在那里访问它的有效负载。谢谢你的帮助!当然可以,我很高兴