Ngrx-effect无法在iOS上有效地发送有效载荷

时间:2019-10-02 09:09:41

标签: ios angular ionic-framework ngrx ngrx-effects

一段时间以来,我一直在寻找解决问题的方法,但是到目前为止,没有任何效果。我正在使用Angular 8和Ngrx开发Ionic 4应用程序。我创建了@Effect,该服务调用了调用http服务的服务,然后我需要调度两个操作。其中之一也有有效载荷。 在开发中一切正常(浏览器)。我已经尝试过Chrome,Firefox,Safari。我在iPhone上尝试时出现问题。在iPhone有效载荷上,发送到操作的是空对象{},而不是带有适当字段的对象。

我试图在非生产模式下进行构建,禁用aot,构建优化器,优化。

存储初始化:

StoreModule.forFeature('rental', reducer),
EffectsModule.forFeature([RentalServiceEffect]),

商店:

export interface Contract {
    address: string;
    identity: string;
    endRentSignature?: string;
}

export interface RentalStoreState {
    status: RentStatus;
    contract?: Contract;
    metadata?: RentalMetadata;
    summary?: RentalSummary;
    carState?: CarState;
}

export const initialState: RentalStoreState = {
    status: RentStatus.NOT_STARTED,
    contract: {
        address: null,
        identity: null,
        endRentSignature: null,
    },
};

操作:

export const rentVerified = createAction(
    '[RENTAL] RENT_VERIFIED',
    (payload: Contract) => ({ payload })
);

减速器:

const rentalReducer = createReducer(
    initialState,
    on(RentActions.rentVerified, (state, { payload }) => ({
        ...state,
        contract: payload,
        status: RentStatus.RENT_VERIFIED
    })));

export function reducer(state: RentalStoreState | undefined, action: Action) {
    return rentalReducer(state, action);
}

服务中的方法

   public startRentalProcedure(
        vehicle: Vehicle,
        loading: any
    ): Observable<IRentalStartResponse> {
        loading.present();

        return new Observable(observe => {
            const id = '';
            const key = this.walletService.getActiveAccountId();

            this.fleetNodeSrv
                .startRent(id, key, vehicle.id)
                .subscribe(
                    res => {
                        loading.dismiss();
                        observe.next(res);
                        observe.complete();
                    },
                    err => {
                        loading.dismiss();
                        observe.error(err);
                        observe.complete();
                    }
                );
        });
    }

问题效果:

@Effect()
public startRentalProcedure$ = this.actions$.pipe(
    ofType(RentalActions.startRentVerifying),
    switchMap(action => {
        return this.rentalSrv
            .startRentalProcedure(action.vehicle, action.loading)
            .pipe(
                mergeMap(response => {
                    return [
                            RentalActions.rentVerified({
                                address: response.address,
                                identity: response.identity
                            }),
                            MainActions.rentalProcedureStarted()
                        ];
                    }),
                    catchError(err => {
                        this.showConfirmationError(err);
                        return of({ type: '[RENTAL] START_RENTAL_FAILED' });
                    })
                );
        })
    );

0 个答案:

没有答案