如果商店已经缓存了数据,如何取消ngrx效果?

时间:2019-06-06 02:24:40

标签: angular ngrx angular-http ngrx-effects

在我的Angular应用中,如果存储中已经有数据,我想停止使用具有ProductService的{​​{1}}来调用服务器。

这是我目前拥有的。我从商店收到信息流,并检查商店是否有商品。如果商店已经有产品,则返回该数据。否则,继续执行流程,获取http,使用categoryId调用服务器并返回数据。

我可以正确执行效果吗?

ProductService

2 个答案:

答案 0 :(得分:0)

您可以使用条件效果

> queueing_system %>%
+   clone(number_of_clones(get_attribute(sim,"d1"),get_attribute(sim,"d2")),routing_logic(get_attribute(sim,"d1"),get_attribute(sim,"d2"),"e1","e2"))%>%
+ synchronize(FALSE)%>%
+   release_selected()
Error: there is no arrival running

答案 1 :(得分:0)

我按照Flignats的建议更新了效果,如下所示:

  loadProducts$ = createEffect(
    () => ({ debounce = 300, scheduler = asyncScheduler } = {}) =>
      this.actions$.pipe(
        ofType(ProductActions.LoadProducts),
        debounceTime(debounce, scheduler),
        withLatestFrom(
          this.store.select(ProductSelectors.selectAllProducts),
          this.rootState.select(fromRoots.getcategory),
        ),
        switchMap(([action, existingProducts, category]) => {

          if (existingProducts.length > 0) {
            return of(ProductActions.LoadProductsSuccess({ Products: existingProducts }));
          }

          return this.ProductService.getProducts(category.categoryId).pipe(
            map(newProducts => (ProductActions.LoadProductsSuccess({ Products: newProducts }))),
            catchError(err => of(ProductActions.LoadProductsFailed(err)))
          )
        })));