Ngrx 效果在完成后端之前返回成功操作



在乐观的工作流程中,我想在后端获取数据之前触发成功操作:

像这样的东西

  @Effect()
  save$ = this.actions$
    .ofType(myActions.SAVE)
    .map((action: myActions.SaveAction) => action.payload)
    .// dispatch success here ?
    .switchMap((foo) => {
      return this.myService
        .updateFoo(foo)
        .catch(error => Observable.of(new myActions.SaveFailAction(error)));
    });

.do(new myActions.SomeSuccessAction)

或者,如果您要使用管道运算符(使用 RXJS 5.5+(,则do将重命名为 tap

只是出于好奇...你为什么要做这样的事情?

与其触发额外的动作,不如myActions.SaveActionWithEarlySuccessAction(而不是myAction.SaveAction(,然后这个效果和其他任何对那个特定效果做出反应的东西,不是更好吗?

由于SAVE已经同步,因此不需要SaveSuccess操作。你可以为SaveSuccess做任何你想做的事情,Save,否则保持你所拥有的。

switchMap(foo => this.myService.updateFoo(foo).pipe(
  map(() => new MyActions.NullAction()),
  catchError(error => of(new MyActions.SaveFailAction(error)),
));

您仍然必须在成功时返回操作以防止无限循环,但它不需要执行任何操作。

最新更新