Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 如何在重新加载api调用时仅从ngrx/store获取最新数据_Angular_Asp.net Mvc_Typescript_Rxjs_Ngrx - Fatal编程技术网

Angular 如何在重新加载api调用时仅从ngrx/store获取最新数据

Angular 如何在重新加载api调用时仅从ngrx/store获取最新数据,angular,asp.net-mvc,typescript,rxjs,ngrx,Angular,Asp.net Mvc,Typescript,Rxjs,Ngrx,我在angular应用程序中使用ngrx/store和ngrx/effects 我的问题是reducer中的选择器在从特性状态调用api后返回旧值和新值。下面是我的代码: 减速机 case PortfolioActions.PortActionTypes.LOAD_SUCCESS_TRADE_NAV: return { ...state, navData: action.payload, isLoadingNav: false };

我在angular应用程序中使用ngrx/store和ngrx/effects

我的问题是reducer中的选择器在从特性状态调用api后返回旧值和新值。下面是我的代码:

减速机

case PortfolioActions.PortActionTypes.LOAD_SUCCESS_TRADE_NAV:
    return {
        ...state,
        navData: action.payload,
        isLoadingNav: false
    };

export const getNavData = createSelector(
    getPortfolioFeatureState,
    state => state.navData
);
实际上是

@Effect()
    loadNav$: Observable<Action> = this.action$.pipe(
        ofType<fromPortfolio.LoadTradeNAV>(fromPortfolio.PortActionTypes.LOAD_TRADE_NAV),
        switchMap((action) => this.dashSvc.getNetAssetValue(action.payload.key,action.payload.currency)
            .pipe(
                map((data) => {
                    return new fromPortfolio.LoadSuccessTradeNAV(data)
                })
            )
        )
    );
在组件中,当我调用
reload()
方法时,在
subscribe()
中,我总是获取旧数据,然后在api调用完成后获取新数据


我的问题是,只有在api加载成功后,我如何才能获取存储数据

@Effect()
    loadNav$: Observable<Action> = this.action$.pipe(
        ofType<fromPortfolio.LoadTradeNAV>(fromPortfolio.PortActionTypes.LOAD_TRADE_NAV),
        withLatestFrom(this.store.pipe(select(selector))), // pass in your selector here in select()
        switchMap((action) => this.dashSvc.getNetAssetValue(action.payload.key,action.payload.currency)
            .pipe(
                map((data) => {
                    return new fromPortfolio.LoadSuccessTradeNAV(data)
                })
            )
        )
    );

看来我们很接近了。我在重新加载时获得上一个值,而不是当前值。
@Effect()
    loadNav$: Observable<Action> = this.action$.pipe(
        ofType<fromPortfolio.LoadTradeNAV>(fromPortfolio.PortActionTypes.LOAD_TRADE_NAV),
        withLatestFrom(this.store.pipe(select(selector))), // pass in your selector here in select()
        switchMap((action) => this.dashSvc.getNetAssetValue(action.payload.key,action.payload.currency)
            .pipe(
                map((data) => {
                    return new fromPortfolio.LoadSuccessTradeNAV(data)
                })
            )
        )
    );
ngOnInit() {
    this.portStore.pipe(
    select(fromPortfolio.getNavData),
    filter(f => !!f),
    takeWhile(() => this.componentActive))
    .subscribe((fmtRes) => {
        console.log(fmtRes) //Issue here
        this.data = fmtRes;
    })
}