Ngrx效果在完成后端之前返回successAction

时间:2018-04-20 15:18:00

标签: angular ngrx ngrx-effects

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

类似这样的事情

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

2 个答案:

答案 0 :(得分:0)

do

或者,如果您将使用可管理的运算符(使用rxjs 5.5+),则tap将重命名为myActions.SaveActionWithEarlySuccessAction

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

而不是激发额外的动作,你不会更好地拥有var Array = [['a', 'b', 'c'], ['b', 'c', 'd'], ['a', 'd', 'b']]; var TempArray = []; var EndArray = []; Array.forEach(function(a) { a.sort(); a.forEach(function(b) { if (!TempArray.includes(b)) { TempArray.push(b); } }); }); TempArray.sort(); Array.forEach(function(a) { a.sort(); var Member = []; TempArray.forEach(function(b) { Member.push((a.includes(b)) ? b : null); }); EndArray.push(Member); }); console.log(EndArray);(而不是myAction.SaveAction),然后这个效果和其他任何反应对那个特定的一个?

答案 1 :(得分:0)

由于SAVE已经同步,因此您无需执行SaveSuccess操作。您可以为SaveSuccess执行Save的任何操作,而不是保留您拥有的内容。

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

你仍然需要返回成功的动作以防止无限循环,但它不需要做任何事情。