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

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

@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 is not function"), которую я получал).

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

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

1 ответ

Некоторые вещи, чтобы проверить:

  • 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 > (это тип возврата действий, которые можно отправить в эффекте)

Другие вопросы по тегам