В моем приложении Angular я хочу прекратить вызывать сервер, используя ProductService
с http
, если в хранилище уже есть данные.
Это то, что у меня сейчас есть. Я получаю поток из магазина и проверяю, есть ли в магазине продукты. Если в магазине уже есть товары, верните эти данные. В противном случае продолжите поток, получите categoryId
, вызовите сервер с помощью ProductService
и верните данные.
Правильно ли я делаю эффект?
loadProducts$ = createEffect(
() => ({ debounce = 300, scheduler = asyncScheduler } = {}) =>
this.actions$.pipe(
ofType(ProductActions.LoadProducts),
debounceTime(debounce, scheduler),
switchMap(() => this.ProductStore.pipe(select(ProductSelectors.selectAllProducts))),
switchMap((Products) => {
if (Products.length != 0) {
return ProductActions.LoadProductsSuccess({ Products });
}
return of(ProductActions.LoadProductsCancelled({ Products }));
}),
switchMap(() => this.store.pipe(select(fromRoots.getCategory))),
switchMap((category) =>
this.ProductService.getProducts(category.categoryId).pipe(
map(Products => (ProductActions.LoadProductsSuccess({ Products }))),
catchError(err => of(ProductActions.LoadProductsFailed(err))
)
))));