API 不会在 ngrx-angular6 中调用
API call won't happen in ngrx-angular6
我是新手 ngrx.API 在 ngrx-angular6 中调用不会发生。我已经尝试了一切。我找不到我哪里错了。一整天都浪费在这里。:(
在 Effects 中我调用了一个服务并变得可观察
@Effect()
isFileFeed$ = this.dataPersistence.fetch(LandingActionTypes.LoadIsFileFeed, {
run: (action: LoadFileFeed, state: LandingState) => {
const url = `www.sample.com`;
this.service.apiRequest(url).pipe(
map(function(status){
new LoadFileSuccess(status);
}),
catchError(err => of(new LoadFileError(err.Description)))
);
},
onError: (action: LoadFileFeed, error) => {
console.error('Error', error);
return new LoadFileError(error);
}
});
在服务中我使用了管道和水龙头。如果我直接调用 subscribe API 调用 Invokes。但在这里它不会调用任何 API。我也在网络选项卡中进行了验证。
apiRequest(url){
return this.http.get<any>(url)
.pipe(tap(response =>
this.log(`Service :api success: ${url}`);
),
catchError(this.handleError)
);
}
这是我在选择器中的代码
const getLandingState = createFeatureSelector<LandingState>('landing');
const getFileEnableStatus = createSelector(
getLandingState,
(state: LandingState) => state.isFileFeedEnabled
);
并且我已经通过在我的组件中订阅来使用我的可观察对象,如下所示。
this.landingPageStore.pipe(select(landingSelector.landingQuery.getFileEnableStatus)).subscribe(res=>{
this.isFileEnabled = res;
})
如果您的效果根本没有触发,可能是您从未在@NgModule 的导入部分中注册它。
@NgModule({
imports:[
// Some imports
EffectsModule.forRoot([MyEffectClass])
]
})
另一种可能性是您缺少 return 服务的可观察对象,以及 map 函数中的函数,您可能更幸运的是:
return this.service.apiRequest(url).pipe(
map((status: any) => {
return new LoadFileSuccess(status)
}
如果将箭头函数用大括号括起来,请确保明确添加了 return 关键字,否则事情将无法按预期运行。
我是新手 ngrx.API 在 ngrx-angular6 中调用不会发生。我已经尝试了一切。我找不到我哪里错了。一整天都浪费在这里。:(
在 Effects 中我调用了一个服务并变得可观察
@Effect()
isFileFeed$ = this.dataPersistence.fetch(LandingActionTypes.LoadIsFileFeed, {
run: (action: LoadFileFeed, state: LandingState) => {
const url = `www.sample.com`;
this.service.apiRequest(url).pipe(
map(function(status){
new LoadFileSuccess(status);
}),
catchError(err => of(new LoadFileError(err.Description)))
);
},
onError: (action: LoadFileFeed, error) => {
console.error('Error', error);
return new LoadFileError(error);
}
});
在服务中我使用了管道和水龙头。如果我直接调用 subscribe API 调用 Invokes。但在这里它不会调用任何 API。我也在网络选项卡中进行了验证。
apiRequest(url){
return this.http.get<any>(url)
.pipe(tap(response =>
this.log(`Service :api success: ${url}`);
),
catchError(this.handleError)
);
}
这是我在选择器中的代码
const getLandingState = createFeatureSelector<LandingState>('landing');
const getFileEnableStatus = createSelector(
getLandingState,
(state: LandingState) => state.isFileFeedEnabled
);
并且我已经通过在我的组件中订阅来使用我的可观察对象,如下所示。
this.landingPageStore.pipe(select(landingSelector.landingQuery.getFileEnableStatus)).subscribe(res=>{
this.isFileEnabled = res;
})
如果您的效果根本没有触发,可能是您从未在@NgModule 的导入部分中注册它。
@NgModule({
imports:[
// Some imports
EffectsModule.forRoot([MyEffectClass])
]
})
另一种可能性是您缺少 return 服务的可观察对象,以及 map 函数中的函数,您可能更幸运的是:
return this.service.apiRequest(url).pipe(
map((status: any) => {
return new LoadFileSuccess(status)
}
如果将箭头函数用大括号括起来,请确保明确添加了 return 关键字,否则事情将无法按预期运行。