使用NGRX效果的乐观更新策略?

问题描述 投票:0回答:1

我们正在将NGRX库集成到我们工作的公司的项目中,我们希望在前端执行乐观更新,而不是等待服务器响应执行某些操作。我们尝试的是使用startWith运算符,但它抛出Action properly然后,因为releaseService.deleteRelease方法不返回动作,它抛出invalid action: null错误。

我们已经尝试将{dispatch: false}配置添加到@Effect,但是然后第一个动作没有被抛出......

我们还考虑过将tap运算符和调度程序直接用于商店,但我们认为它是一种反模式。

那么,是否有可能在不创建splitter中间动作的情况下实现这一目标?谢谢。

@Effect()
deleteRelease$ = this.actions$.pipe(
    ofType(ReleaseCardActions.ReleaseCardActionTypes.DeleteRelease),
    exhaustMap((action: ReleaseCardActions.DeleteRelease) => {
        return this.releaseService.deleteRelease(action.id).pipe(
            startWith(new DeleteReleaseSuccess(action.id)),
            catchError(() => of(new ReleasesApiActions.DeleteReleaseFailure()))
        );
    }),
);
ngrx ngrx-effects
1个回答
0
投票

也许我不明白这个问题,但为什么不直接在reducer中对DeleteRelease动作执行乐观更新,所以你的reducer和effect会独立地触发同一个动作。然后,您可以从来自effet的响应中进行“真实”更新。

@Effect()
deleteRelease$ = this.actions$.pipe(
    ofType(ReleaseCardActions.ReleaseCardActionTypes.DeleteRelease),
    exhaustMap((action: ReleaseCardActions.DeleteRelease) => {
        return this.releaseService.deleteRelease(action.id).pipe(
            map(new DeleteReleaseSuccess(action.id)),
            catchError(() => of(new ReleasesApiActions.DeleteReleaseFailure()))
        );
    }),
);
© www.soinside.com 2019 - 2024. All rights reserved.