我试图弄清楚@ ngrx / effects的工作原理,但是在这个简单示例中,我的错误和stackbliz代码下方出现了一些问题
https://stackblitz.com/edit/redux-in-actions?file=src%2Fapp%2Fstore%2Feffects%2Ftask.effects.ts
类型'Observable'不可分配给类型 “可观察”。 “ void”类型不能分配给“ Action”类型
谢谢
答案 0 :(得分:1)
从一开始就有几处错误
pipe(map(data => ...)
中的import { map } from 'rxjs/operators'
。dispatch: false
,否则您将陷入无休止的循环。效果应返回动作或dispatch: false
@Effect({ dispatch: false })
loadTasks$: Observable<void> = this.actions$.pipe(
ofType(fromActions.ADD_TASK),
switchMap(() => this.taskService.GetTasks().pipe(
map(data => {
console.log(data);
})
)
));
@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; })
}))
);