Тип 'void' не может быть присвоен типу 'ObservableInput <Action>' - PullRequest
0 голосов
/ 19 октября 2018

Я получаю следующую ошибку типа, когда пытаюсь отправить наблюдаемое действие в моем эффекте, как показано ниже:

 @Effect()
    rideSummary$: Observable<Action> = this.actions$.pipe(
        ofType<GetRideSummary>(RideActionTypes.GetRideSummary),
        map(action => action.payload),
        switchMap(payload => {
            const { ride, passenger } = payload;
            const allPassengers = [...ride.passengers, passenger];
            this.store.dispatch(new SetLoading);
            return this.directionService.computeRideRouteSummary(ride, allPassengers)
            .then((summary: RideRouteSummary) => {
                const updatedRoute = Geometry.newFromData({
                    type: Geometry.LINE_STRING,
                    coordinates: summary.route
                });

                const totalTime = summary.totalTime;
                const arrivalTime = ride.type === Ride.TYPE_TOWORK ?
                    ride.hour :
                    ride.hour + summary.totalTime;
                const departureTime = ride.type === Ride.TYPE_TOWORK ?
                    ride.hour - summary.totalTime :
                    ride.hour;
               this.store.dispatch(new UnsetLoading);
               return this.store.dispatch(new GetRideSummarySuccess({
                    updatedRoute,
                    totalTime,
                    arrivalTime,
                    departureTime
                }));
                }
            ).catch(error => {
                this.store.dispatch(new UnsetLoading);
                catchError(() => of(new HandleError(error)));
            });
        })
    );

Ошибка типа говорит:

Unable to assign an argument of type "(payload: {ride: Ride; passenger: Passenger;}) => void" to the type parameter "(value: {ride: Ride; passenger: Passenger;}, index: number) => ObservableInput <Action> ".
The type 'void' can not be assigned to the type 'ObservableInput <Action>'.

Я не уверен, в чем проблема с кодом.Кажется, что-то связано с promise.Любая помощь?

1 Ответ

0 голосов
/ 20 октября 2018

Эффект определяется как @Effect(), что означает, что он ожидает Action.Быстрое, но грязное исправление - определить ваш эффект как @Effect({dispatch: false}).Более правильное решение - удалить все отправки магазина в вашем эффекте и вернуть действие.

Быстрый пример:

switchMap(payload => {
  this.store.dispatch(new FooBar());
}

Кому:

switchMap(payload => {
  return new FooBar();
}
...