Angular ngrx @ effect基本问题:类型'Observable <void>'无法分配给类型

时间:2018-12-05 18:02:21

标签: angular typescript ngrx ngrx-store ngrx-effects

我试图弄清楚@ ngrx / effects的工作原理,但是在这个简单示例中,我的错误和stackbliz代码下方出现了一些问题

https://stackblitz.com/edit/redux-in-actions?file=src%2Fapp%2Fstore%2Feffects%2Ftask.effects.ts

  

类型'Observable'不可分配给类型   “可观察”。 “ void”类型不能分配给“ Action”类型

谢谢

enter image description here

2 个答案:

答案 0 :(得分:1)

从一开始就有几处错误

  • 您遇到的错误是因为您需要pipe(map(data => ...)中的import { map } from 'rxjs/operators'
  • 然后,由于您不返回任何操作,因此需要添加dispatch: false,否则您将陷入无休止的循环。

两个选项

效果应返回动作或dispatch: false

选项1:无调度动作

@Effect({ dispatch: false }) 
loadTasks$: Observable<void> = this.actions$.pipe(
   ofType(fromActions.ADD_TASK),
   switchMap(() => this.taskService.GetTasks().pipe(
      map(data => {             
        console.log(data);        
      })
   ) 
));

选项2:发送操作

@Effect()
loadTasks$: Observable<void> = this.actions$.pipe(
  ofType(fromActions.ADD_TASK),
  switchMap(() =>
    this.taskService.GetTasks().pipe(
      map(
        (data: Task[]) => new SomeActionYouGot(data);
      ),
      catchError(error =>
        of(new SomeOtherActionThatIndicatesFailFor(data))
      )
    )
  );

答案 1 :(得分:0)

在RXJS中,在地图运算符内部,您需要返回观察者订阅时将收到的值。

    @Effect() 
  loadTasks$: Observable<Task[]> = this.actions$
    .ofType(fromActions.ADD_TASK).pipe(
    switchMap(() => ({this.taskService.GetTasks().map(data => {
            return data; })            
      })) 

    );