Angular:ngrx / effects的一些问题

时间:2019-12-20 06:49:03

标签: angular ngrx ngrx-store ngrx-effects

我已经定义了这样的效果:


@Injectable()
export class SearchEffects {
  constructor(
    private actions$: Actions,
    private service: IService,
    private store: Store<AppState>,
  ) { }


  @Effect()
  save$: Observable<Action> = this.actions$.pipe(
    ofType(ActionTypes.SAVE),
    withLatestFrom(this.store.select(selectors.getAllResults)),
    map(([_, results]) => results),
    switchMap(results=> {
      const observables: Array<Observable<Object>> = [];
      for (const v of results) {
        if (!v.name) {
          this.store.dispatch(new NameRequiredAction());             // if name is empty,dispatch an action,and continue naxt loop;
          continue;
        }
        const ob = this.service.save(v);
        observables.push(ob);
      }
      return merge(...observables);                 // merge all saved results.
    }),
    map(res => new SaveSuccess(res))
  );
}

在这种情况下,我保存了一个对象数组。而且我必须一一保存。

首先,使用withLatestFrom从ngrx / store获取所有结果。为results

switchMapresults中的

秒,并保存每个结果。然后合并所有返回的值。但是,如果名称为空,我应该调度一个操作来通知客户端并继续下一个循环。

第三,为每个返回的值调度新的动作。

我不确定这是否是我想要的正确方法。而且我不知道分发效果并返回新动作是否正确。任何人都可以帮助我。

0 个答案:

没有答案