Angular NgRx效应中的条件返回操作

Angular NgRx效应中的条件返回操作,angular,rxjs,ngrx,ngrx-effects,Angular,Rxjs,Ngrx,Ngrx Effects,我试图检查效果中的条件,并根据条件结果分派不同的操作。条件参数从存储和API调用中获得,如下所示 @Effect() // error here - Observable<void> is not assignable to type Observable<Action> loadUserSkills$: Observable<Action> = this.actions$ .ofType(UserActionTypes.REQUEST_USER_

我试图检查效果中的条件,并根据条件结果分派不同的操作。条件参数从存储和API调用中获得,如下所示

@Effect()
// error here - Observable<void> is not assignable to type Observable<Action>
  loadUserSkills$: Observable<Action> = this.actions$
    .ofType(UserActionTypes.REQUEST_USER_SKILLS)
    .withLatestFrom(this.store$)
    .map(([action, storeState]) => {
      this.skillsService.getUserSkillsCacheVersion().
        map((cacheVersion) => {
          if (cacheVersion === storeState.users.cacheVersion.userSkills) {
            return new UsersActions.RequestUserSkillsFromStore();
          } else {
            return new UsersActions.RequestUserSkillsFromServer();
          }
        });
      });
  @Effect()
  loadUserSkills$: Observable<Action> = this.actions$
    .ofType(UserActionTypes.REQUEST_USER_SKILLS)
    .withLatestFrom(this.store$)
    .map(([, storeState]) => storeState.users.cacheVersion.userSkills)
    .switchMap((currentCacheVersion) =>
      forkJoin([of(currentCacheVersion), this.skillsService.getUserSkillsCacheVersion()]))
    .map((data: any) => {
      const [currentCacheVersion, latestCacheVersion] = data;
      if (latestCacheVersion !== 0 && currentCacheVersion === latestCacheVersion) {
        return new UsersActions.RequestUserSkillsFromStore();
      } else {
        return new UsersActions.RequestUserSkillsFromServer();
      }
    });
@Effect()
//此处错误-Observable不可分配给Observable类型
loadUserSkills$:Observable=this.actions$
.of类型(UserActionTypes.REQUEST\u USER\u技能)
.withLatestFrom(此.store$)
.map([action,storeState])=>{
此.skillsService.getUserSkillsCacheVersion()为。
映射((缓存版本)=>{
if(cacheVersion==storeState.users.cacheVersion.userSkills){
返回新的UsersActions.RequestUserSkillsFromStore();
}否则{
返回新的UsersActions.RequestUserSkillsFromServer();
}
});
});

这里有什么不正确的地方?

我会在没有为loadUserSkills$声明类型的情况下尝试此操作,我从未见过有人在那里声明类型。此外,新的标准是不点链,但使用

    this.actons$.pipe(ofType(...),withLatestFrom(...),...
您是否将存储包含在类的构造函数中

    constructor(private store$: AppState, private actions$: Action) 
通常,您会使用选择器选择效果中的状态片段,而不是像那样直接访问它们。查看NGRX选择器

    this.store$.pipe(select(selectUserSkills)) 
但您必须设置一个名为selectUserSkills的选择器

此外,如果您的this.skillsService.getUserSkillsCacheVersion()返回一个可观察值,那么您需要订阅它,以防发生任何事情


我想这里需要更多的信息。请发布更多代码。此错误是在运行时还是编译时发生的?

您没有返回地图内部

return this.skillsService...

所以typescript认为这是一个空洞

我通过稍微修改效果和如下所示的观察值来修复它

@Effect()
// error here - Observable<void> is not assignable to type Observable<Action>
  loadUserSkills$: Observable<Action> = this.actions$
    .ofType(UserActionTypes.REQUEST_USER_SKILLS)
    .withLatestFrom(this.store$)
    .map(([action, storeState]) => {
      this.skillsService.getUserSkillsCacheVersion().
        map((cacheVersion) => {
          if (cacheVersion === storeState.users.cacheVersion.userSkills) {
            return new UsersActions.RequestUserSkillsFromStore();
          } else {
            return new UsersActions.RequestUserSkillsFromServer();
          }
        });
      });
  @Effect()
  loadUserSkills$: Observable<Action> = this.actions$
    .ofType(UserActionTypes.REQUEST_USER_SKILLS)
    .withLatestFrom(this.store$)
    .map(([, storeState]) => storeState.users.cacheVersion.userSkills)
    .switchMap((currentCacheVersion) =>
      forkJoin([of(currentCacheVersion), this.skillsService.getUserSkillsCacheVersion()]))
    .map((data: any) => {
      const [currentCacheVersion, latestCacheVersion] = data;
      if (latestCacheVersion !== 0 && currentCacheVersion === latestCacheVersion) {
        return new UsersActions.RequestUserSkillsFromStore();
      } else {
        return new UsersActions.RequestUserSkillsFromServer();
      }
    });
@Effect()
loadUserSkills$:Observable=this.actions$
.of类型(UserActionTypes.REQUEST\u USER\u技能)
.withLatestFrom(此.store$)
.map(([,storeState])=>storeState.users.cacheVersion.userSkills)
.switchMap((当前缓存版本)=>
forkJoin([of(currentCacheVersion),this.skillsService.getUserSkillsCacheVersion()]))
.map((数据:任意)=>{
const[currentCacheVersion,latestCacheVersion]=数据;
如果(latestCacheVersion!==0&¤tCacheVersion===latestCacheVersion){
返回新的UsersActions.RequestUserSkillsFromStore();
}否则{
返回新的UsersActions.RequestUserSkillsFromServer();
}
});