在Angular NgRx中,我们可以使用forkJoin运算符来发出N次操作并在全部完成时发出成功操作。 以下是一个示例代码,使用forkJoin操作符来解决此问题:
import { Actions, ofType, Effect } from '@ngrx/effects';
import { Injectable } from '@angular/core';
import { Observable, of, forkJoin } from 'rxjs';
import { map, switchMap } from 'rxjs/operators';
import { Action1, Action2, Action3, AllActionsCompleted } from './actions';
@Injectable()
export class MyEffects {
@Effect()
dispatchActions$: Observable = this.actions$.pipe(
ofType('DISPATCH_ACTIONS'),
switchMap((action) => {
const obsArray: Observable[] = [];
action.payload.forEach((item) => {
obsArray.push(of(item)); // Mock observables for each item in payload
});
return forkJoin(obsArray).pipe(
map(() => new AllActionsCompleted())
);
})
);
constructor(private actions$: Actions) {}
}
在此示例中,我们使用了effects来监听DISPATCH_ACTIONS动作。然后,我们使用forkJoin操作符并将其应用于一个Observable数组来并发执行每个操作。当所有操作都完成时,我们创建并发出一个AllActionsCompleted动作。