我编写了 Effect 用于从 API 加载类别项目,但我的 effect 被无限期调用。我应该做什么:
- 仅加载一次类别列表。
- 如果 API 没有响应,则类别列表为空。
我注意到类别已正确加载,但请求被无限期执行。
下面我放代码:
类别.效果.ts
@Injectable()
export class CategoryEffects {
@Effect()
getAll$: Observable<Action> = this.actions$
.ofType(category.LOAD)
.startWith(new category.LoadAction([]))
.switchMap(() => {
return this._categoriesService.getAllCategories()
.map(categories => new category.LoadAction(categories))
.catch(() => of(new category.LoadAction([])));
});
constructor(private actions$: Actions, private _categoriesService: CategoriesService) {
console.log('CategoryEffects constructor')
}
}
类别.service.ts
@Injectable()
export class CategoriesService {
private API_PATH = 'https://private-xxx.apiary-mock.com/categories';
constructor(private http: Http) {}
getAllCategories(): Observable<Category[]> {
return this.http.get(`${this.API_PATH}`)
.map(res => res.json() || []);
}
}
app.module.ts
@NgModule({
//...
imports: [
//...
EffectsModule.run(CategoryEffects)
],
//...
})