NgRx效果中的有条件返回动作

时间:2019-02-19 00:56:12

标签: angular rxjs ngrx ngrx-effects

我正在尝试检查效果中的条件,并根据条件结果调度不同的操作。条件参数是从Store和如下所示的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();
          }
        });
      });

这里不正确吗?

3 个答案:

答案 0 :(得分:0)

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

    this.actons$.pipe(ofType(...),withLatestFrom(...),...

您是否将商店包括在类的构造函数中?

    constructor(private store$: AppState, private actions$: Action) 

通常,您还可以使用选择器来选择效果中的状态,而不是像这样直接访问它们。查看NGRX选择器。

    this.store$.pipe(select(selectUserSkills)) 

但是您必须设置一个名为selectUserSkills的选择器

如果您的this.skillsService.getUserSkillsCacheVersion()返回的是Observable,则您需要订阅该事件以备不时之需。

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

答案 1 :(得分:0)

您不会在地图内返回。

return this.skillsService...

所以打字稿认为这是空的

答案 2 :(得分:0)

我通过稍微修改效果来修复它,并如下所示加入了Fork。

s = session()
order = Order(customer_id=customer_id, delivery_charges=delivery_charges,
              sub_total=sub_total)
s.add(order)
order.add_item(s, 1, 10)
order.add_item(s, 2, 8)
s.commit()