gpt4 book ai didi

angular - NGRX:如何从内部使用不同的有效负载多次调用相同的服务

转载 作者:行者123 更新时间:2023-12-04 10:54:44 26 4
gpt4 key购买 nike

我不想使用 forkJoin 内部效果

在我的效果中,我得到了一组 id,在这些 id 的帮助下,我想多次调用 service。
每次收到回复时,我都想发送一个 Action 来更新我的商店

@Injectable()
export class MovieEffects {
loadMovies$ = createEffect(() =>
this.actions$.pipe(
ofType('[Movies Page] Load Movies'),

//here i am getting one array object via action, e.g. = [{id: 1},{id: 2},{id: 3},{id: 4} ]
//and here i want to call same service 4 time as per array length
// every time when get response i want to dispatch one action with response payload

mergeMap((action) => this.moviesService.getAll()
.pipe(
map(movies => ({ type: '[Movies API] Movies Loaded Success', payload: movies })),
catchError(() => of({ type: '[Movies API] Movies Loaded Error' }))
)
)
)
);

constructor(
private actions$: Actions,
private moviesService: MoviesService
) {}
}

最佳答案

只需对您的 id 数组执行 for each 并在该循环中调用您的服务,创建并订阅新的 observables 并在完成后调度操作。

    loadMovies$ = createEffect(() =>
this.actions$.pipe(
ofType('[Movies Page] Load Movies'),
tap((action) => {
action.payload.forEach(id =>
this.movieService.getMovie(id).pipe(
map(movie => this.store.dispatch(new fromStore.GetMovieSuccess(movie)),
catchError(() => this.store.dispatch(new fromStore.GetMovieFail(id)))
.subscribe();
}
)
), {dispatch: false}
);

我个人几乎总是将 {dispatch: false} 用于我的效果并手动发送事件,因为我不喜欢总是在效果结束时使用它们,并且经常在语法上遇到一些其他问题。

关于angular - NGRX:如何从内部使用不同的有效负载多次调用相同的服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59284059/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com