0

我编写了 Effect 用于从 API 加载类别项目,但我的 effect 被无限期调用。我应该做什么:

  1. 仅加载一次类别列表。
  2. 如果 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)
  ],
  //...
})
4

0 回答 0