ForkJoin未停止请求

问题描述 投票:0回答:1

[只要有时间,我都尝试一次创建HTTP请求,而不是一个接一个地插入多个调用,而我使用forkJoin

但是他不是只发出两个请求,而是执行以下操作:

  1. 提出两个请求的请求
  2. 对上一个请求进行无限循环

发生了什么事?

enter image description here

BACKEND:

updatePartial(people: Update<IPeople>): Observable<Update<IPeople>> {
        return this.httpClient.patch<Update<IPeople>>(`${this.endpoint}/${people.id}`, people);
    }

EFFECT:

updateManyPartial$: Observable<Action> = createEffect(() =>
        this.action$.pipe(
            ofType(fromPeopleActions.UPDATE_MANY_PARTIAL),
            mergeMap((action) => {
                const https: Observable<Update<IPeople>>[] = [];
                action.updates.forEach((people) => https.push(this.backend.updatePartial(people)));

                return forkJoin(https).pipe(
                    delay(1000),
                    map(() => fromPeopleActions.UPDATE_MANY_PARTIAL_SUCCESS({ updates: action.updates })),
                    catchError((error) => of(fromPeopleActions.UPDATE_MANY_PARTIAL_FAIL({ error: this.requestHandler.getError(error) })))
                );
            })
        )
    );

减速器:

const peopleReducer = createReducer(
    INIT_STATE,
    on(fromPeopleAction.GET_ALL_SUCCESS, fromPeopleAction.CREATE_ALL_SUCCESS, (state, { peoples }) => adapter.addMany(peoples, { ...state, loading: false })),
    on(fromPeopleAction.UPDATE_MANY_PARTIAL_SUCCESS, (state, { updates }) => adapter.updateMany(updates, { ...state, loading: false })),
    on(fromPeopleAction.GET_ALL_FAIL, fromPeopleAction.CREATE_ALL_FAIL, fromPeopleAction.UPDATE_MANY_PARTIAL_FAIL, (state, { error }) => ({
        ...state,
        error,
        loading: false,
    }))
);

ACTIONS:

export const UPDATE_MANY_PARTIAL = createAction('[PATCH] Partially update many people', props<{ updates: Update<IPeople>[] }>());
export const UPDATE_MANY_PARTIAL_SUCCESS = createAction('[PATCH] Partially update many people with success', props<{ updates: Update<IPeople>[] }>());
export const UPDATE_MANY_PARTIAL_FAIL = createAction('[PATCH] Partially update many people failed', props<{ error: IRequestError }>());

COMPONENT:

openTalkContainer(friend: IPeople): void {
        this.selectorsService.userFriendClicked.subscribe((people) => {
            this.dispatchService.updateManyPartial([
                {
                    id: people.id,
                    changes: {
                        isClicked: false,
                    },
                },
                {
                    id: friend.id,
                    changes: {
                        isClicked: true,
                    },
                },
            ]);
        });
    }
angular rxjs ngrx fork-join
1个回答
0
投票

我遇到的问题是通过订阅选择器,但是我通过执行以下操作解决了这个问题:

openTalkContainer(friend: IPeople): void {
        this.subscriberUpdate$.add(
            this.selectorsService.userFriendClicked.subscribe((people) => {
                this.dispatchService.updateManyPartial([
                    {
                        id: people.id,
                        changes: {
                            isClicked: false,
                        },
                    },
                    {
                        id: friend.id,
                        changes: {
                            isClicked: true,
                        },
                    },
                ]);
            })
        );

        this.subscriberUpdate$.complete();
        this.subscriberUpdate$.unsubscribe();
    }

现在,我希望有人向我解释为什么它处于无限循环中,为什​​么我设法以这种方式解决它。

© www.soinside.com 2019 - 2024. All rights reserved.