如何成功的服务调用后执行两种不同类型的行动NGRX

问题描述 投票:0回答:2

所以我有一个产品搜索效果。基本上,我第一次派遣search_start行动,其中有针对搜索参数的有效载荷,其效果需要的是然后去服务,我得到的是响应返回,这使我的产品列表。我希望能够再做两件事情:

  1. 派遣一个成功的动作与产品的集合
  2. 保存的参数为搜索中使用更高版本的“搜索历史”,这是目前在“action.payload”

我有一个问题,第二张,主要是因为这样做switchMap并具有“SearchResultResponseType”的返回类型意味着我现在不能做SearchSave(action.payload)主要是因为有效载荷具有“SearchParameterType”的类型。所以我只能执行我SearchSuccess行动。

有反正这是可以实现的?我试图改变响应类型的超类型既需要SearchParameterType和SearchResultResponseType作为这种类型的两个属性和有我productSearchService回报,而不是但这似乎产生错误也是如此。是不是有假笑的方式?

       export class ProductSearchEffects {
          @Effect() startSearch$: Observable<
            ActionWithPayload<SearchResultResponseType> | Observable<Action>
          > = this.actions$.pipe(
            ofType<SearchStart>(ProductSearchActions.SEARCH_START),
            mergeMap(action =>
              this.productSearchService.fetchSearchResults(action.payload)
                .pipe(
// if successful then save search and dispatch search success
                switchMap((data: SearchResultResponseType) => [
                    new SearchSave(action.payload),
                    new SearchSuccess(data),
                  ]),

                  catchError(() => of(new SearchFail())),
                ),
            ),
          );
angular rxjs ngrx rxjs6 ngrx-effects
2个回答
2
投票

我不认为你需要明确定义返回类型。你可以用mergeMap做到这一点并非如此。我看你把你的switchMapmergeMap在倒车时,你只需要扭转的位置,你应该是好去。

export class ProductSearchEffects {
          @Effect() startSearch$ = this.actions$.pipe(
            ofType<SearchStart>(ProductSearchActions.SEARCH_START),
            switchMap(action =>
              this.productSearchService.fetchSearchResults(action.payload)
                .pipe(
                  mergeMap((data: SearchResultResponseType) => [
                    new SearchSave(action.payload),
                    new SearchSuccess(data),
                  ]),
                  catchError(() => of(new SearchFail())),
                ),
            ),
          );

0
投票

我已经看到并亲自通过的共同做法是别名你的行动,即type SearchAction = SearchStart | SearchSave | SearchSuccess | SearchFail'然后你的效果返回类型为Observable<SearchAction>。然后打字稿将验证所有要退回的行动别名所覆盖。

© www.soinside.com 2019 - 2024. All rights reserved.