我正在尝试弄清楚 @ngrx/effects 的工作原理,但在下面的简单示例中遇到了一些问题,以下是我的错误和 stackbliz 代码
https://stackblitz.com/edit/redux-in-actions?file=src%2Fapp%2Fstore%2Feffects%2Ftask.effects.ts
类型“Observable”不能分配给类型“Observable”。类型“void”不能分配给类型“Action”
谢谢
我正在尝试弄清楚 @ngrx/effects 的工作原理,但在下面的简单示例中遇到了一些问题,以下是我的错误和 stackbliz 代码
https://stackblitz.com/edit/redux-in-actions?file=src%2Fapp%2Fstore%2Feffects%2Ftask.effects.ts
类型“Observable”不能分配给类型“Observable”。类型“void”不能分配给类型“Action”
谢谢
@Effect()
loadTasks$: Observable<Task[]> = this.actions$
.ofType(fromActions.ADD_TASK).pipe(
switchMap(() => ({this.taskService.GetTasks().map(data => {
return data; })
}))
);
首先,有几个问题需要解决:
import { map } from 'rxjs/operators'
引入 pipe(map(data => ...)
。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))
)
)
);
map()
中添加一个返回语句;return data
- Ashish Ranjan