Angular ngrx@effect基础问题:类型“Observable<void>”无法分配给类型

5

map() 中添加一个返回语句;return data - Ashish Ranjan
谢谢,但是没有任何改变。 - Gelso77
2个回答

4
在RXJS中,map操作符内部,你需要返回值将在观察者订阅时接收到。
    @Effect() 
  loadTasks$: Observable<Task[]> = this.actions$
    .ofType(fromActions.ADD_TASK).pipe(
    switchMap(() => ({this.taskService.GetTasks().map(data => {
            return data; })            
      })) 

    );

回答已更新,请查看。 - Suresh Kumar Ariya
打字错误。已更新。https://stackblitz.com/edit/redux-in-actions?file=src%2Fapp%2Fstore%2Feffects%2Ftask.effects.ts - Suresh Kumar Ariya
添加 import {switchMap} from 'rxjs/operators'; - Suresh Kumar Ariya
this.taskService.GetTasks(...)中没有map函数 - Gelso77
https://stackblitz.com/edit/redux-in-actions?file=src%2Fapp%2Fstore%2Feffects%2Ftask.effects.ts - Suresh Kumar Ariya
显示剩余6条评论

2

首先,有几个问题需要解决:

  • 您遇到的错误是因为您需要从 import { map } from 'rxjs/operators' 引入 pipe(map(data => ...)
  • 然后,您需要添加 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))
      )
    )
  );

谢谢,但不起作用。 https://stackblitz.com/edit/redux-in-actions?file=src%2Fapp%2Fstore%2Feffects%2Ftask.effects.ts - Gelso77
不过,你不能在一个 effect 中返回数据,这就是为什么它“不像你期望的那样工作”的原因。我刚刚解决了引发的错误,并给出了一些提示,告诉你可以做什么。但是,你需要调度一个新的 action 并使用你收到的新数据。希望这能帮到你! - erhise

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接