Эффект NgRx не стреляет - PullRequest
       19

Эффект NgRx не стреляет

0 голосов
/ 07 февраля 2019

Учитывая этот фасад:

@Injectable()
export class LookupDataFacade
{
    public saved$: Observable<boolean>;
    public loaded$: Observable<boolean>;
    public allLookups$: Observable<ILookup[]>;
    public selectedLookup$: Observable<ILookup>;

    constructor( protected store: Store<LookupDataPartialState> ) { }

    loadAll()
    {
        this.store.dispatch( new LoadLookupData() );
    }

    ...
}

И этот класс эффектов:

@Injectable()
export class LookupDataEffects
{
    constructor(
        protected actions$: Actions,
        protected dataPersistence: DataPersistence<LookupDataPartialState>,
        protected service: LookupDataService ) { }

    @Effect()
    loadLookupData$ = this.dataPersistence.fetch<LoadLookupData>( LookupDataActionTypes.Load,
    {
        run: ( action: LoadLookupData, state: LookupDataPartialState ) =>
        {
            return this.service.get().pipe( map( lookups => ( {
                type: LookupDataActionTypes.Loaded,
                payload: { data: lookups }
            } ) ) );
        },

        onError: ( action: LoadLookupData, error: HttpErrorResponse ) => { this.handleError( error ); }
        } );

    ...

    handleError = function( error: HttpErrorResponse )
    {
        console.error( 'Error', error );
        alert( error.message );
        return new LookupDataError( error );
    }
}

Когда страница загружается, вызывается метод loadAll фасада.Действие отправляется, но соответствующий эффект никогда не выполняется.

Этот код работал до того, как я обновил свои пакеты NgRx и Nrwl до последних версий (это нужно было сделать для разрешения Uncaught TypeError: ctorParameters.mapя не получаю фатальную ошибку функции.

Я не вижу никаких ошибок, и нет сетевого трафика, указывающего на сбой.

Кто-нибудь видит явную ошибку?

1 Ответ

0 голосов
/ 13 февраля 2019

Некоторые вещи для проверки:

  • LookupDataEffects зарегистрирован в EffectsModule.forFeature([])
  • LookupDataActionTypes.Load, правильно отображается на new LoadLookupData

Также здесь есть небольшая ошибка:

onError: ( action: LoadLookupData, error: HttpErrorResponse ) => { this.handleError( error ); }

Мы должны либо => this.handleError( error ), либо => { return this.handleError( error ); }

Также fetch<LoadLookupData> должно быть fetch<LoadedLookupData | LookupDataError > (это тип возвратадействия, которые можно отправить в эффекте)

...