NGRX效果“ rxjs减速器运算符”停止了可观察的链

时间:2018-12-29 13:05:48

标签: angular rxjs ngrx ngrx-effects

我正在一个带有NGRX存储和效果的Angular项目。使用 rxjs reducer运算符时出现问题,可观察的链以某种方式停止了。控制台上未显示任何错误。

@Injectable()
export class MyEffects {
    @Effect()
    public grouping$: Observable<Action> = this.actions$.pipe(
        ofType(FIRST_ACTION),
        map((action) => action.payload),
        flatMap(i => i),
        groupBy((i) => i.code),
        flatMap(group$ => {
            return group$.pipe(
                reduce((acc, curr) => {
                    acc.push(curr);
                    console.log('%c curr', 'background-color:green;color:#fff', curr);
                    console.log('%c acc', 'background-color:green;color:#fff', acc);
                    return acc;
                }, []),
                tap(grpArr => console.log('group array', grpArr))
            );
        }),
        switchMap((data) => {
            return [new AnotherAction()];
        })
    );
}   

我的担忧就在眼前

  

点击(grpArr => console.log('group array',grpArr))

Reducer操作员将正确的输出记录在控制台中。但是当我点击结果时,它们没有显示。当然,由于链已停止,最后一个switchMap运算符不会触发。我在这里想念什么吗?

减速机操作员的控制台输出 enter image description here

1 个答案:

答案 0 :(得分:3)

您似乎要使用scan而不是reduce,因为reduce仅在源完成后发出累积值

>

但是,this.actions$从未完成,所以group$从未完成,因此reduce从未发出任何东西。

另一方面,scan将发出每个中间结果。我不知道这是不是您想要的,所以您可能必须与filter或其他东西链接。