1

鉴于这个外观:

@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 包升级到最新版本之前,这段代码可以正常工作(需要这样做来解决我遇到的“未捕获的 TypeError:ctorParameters.map 不是函数”致命错误)。

我没有看到任何错误,也没有表明失败的网络流量。

有人看到明显的错误吗?

4

1 回答 1

0

需要检查的一些事项:

  • 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 >(它是可能在 Effect 中调度的操作的返回类型)

于 2019-02-13T20:57:07.000 回答