我已经定义了这样的效果:
@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
switchMap
中results
中的秒,并保存每个结果。然后合并所有返回的值。但是,如果名称为空,我应该调度一个操作来通知客户端并继续下一个循环。
第三,为每个返回的值调度新的动作。
我不确定这是否是我想要的正确方法。而且我不知道分发效果并返回新动作是否正确。任何人都可以帮助我。