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

时间:2019-02-26 15:12:17

标签: ngrx ngrx-effects

我们正在将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()))
        );
    }),
);

1 个答案:

答案 0 :(得分:0)

也许我听不懂这个问题,但是为什么不直接在化简器中对 DeleteRelease 操作执行乐观更新,因此您的化简器和效果将独立地针对同一操作触发。 然后,您可以根据来自效果的响应进行“实际”更新。

@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()))
        );
    }),
);