我可以使用相同的动作,效果和服务来获得从具有不同有效负载的相同端点发出的值吗?



效果如下:我需要在两个地方使用具有不同有效载荷的相同服务来获取数据。即使我在第一个组件中使用它后取消订阅,当第二个组件的新值出现时,它总是被覆盖。

如果有效载荷不同,我需要使用单独的端点吗?或者有其他方法可以实现这一点。

@Effect()
    getCampaignProductUserCountEffect$: Observable<Action> = this.actions$.pipe(
        ofType<campaignAction.GetCampaignProductUserCountAction>(campaignAction.ActionTypes.GET_CAMPAIGN_PRODUCT_USER_COUNT),
        withLatestFrom(this.store),
        switchMap(([action, state]) => {
            return this.campaignService.campaignProductUserCount(action.payload.data)
                .pipe(
                    mergeMap((response: any) => {
                        return of(new campaignAction.GetCampaignProductUserCountSuccessAction(response));
                    }),
                    catchError(error => 
                         of(new globalActions.PopupNotificationAction({
                            actionType: campaignAction.ActionTypes.GET_CAMPAIGN_PRODUCT_USER_COUNT,
                            messageType: MessageType.Error,
                            message: error.error.message,
                            extraParameters: null,
                            error: error.error,
                            title: MESSAGE_CONSTANTS.CAMPAIGN_TITLE
                        }))
                    ));
        })
    );

这是选择器:

const getCampaignProductUserCount = (state: CampaignState): boolean =>
    state && state.productUserCount && state.productUserCount.data
export const selectCampaignProductUserCount: MemoizedSelector<object, any> = createSelector(
    selectState,
    getCampaignProductUserCount
);

这是我试图在我的一个组件中使用它的方式:

this.campaignStoreService.dispatchGetCampaignProductUserCount({ data: { productQuerys: { query: this.queries } }});
          this.campaignStoreService.selectGetCampaignProductUserCount().subscribe(data => {
            if(data) {
              this.getUserCountCallback(data);
              this.totalUserCount = data.userCount.userCount;
              this.totalReach = data.userCount.user_projection;
            }
          });

在另一个组件中,我需要使用相同的东西,但具有不同的有效负载。

在这个组件中,我发送了一组查询来获取结果,在另一个地方,我需要计算每个查询的结果。

服务
campaignProductUserCount(data) {
    const url = this.apiConfig.getApiUrl() + API_PATH.CAMPAIGN_PRODUCT_USER_COUNT;
    return this.post(url, data);
  }

最初,当我们只需要一次计数时,我们在回调中获取数字。下面是效果(older):

@Effect()
    getCampaignProductUserCountEffect$: Observable<Action> = this.actions$.pipe(
        ofType<campaignAction.GetCampaignProductUserCountAction>(campaignAction.ActionTypes.GET_CAMPAIGN_PRODUCT_USER_COUNT),
        withLatestFrom(this.store),
        switchMap(([action, state]) => {
            return this.campaignService.campaignProductUserCount(action.payload.data)
                .pipe(
                    mergeMap((response: any) => {
                        action.payload.callback && action.payload.callback({ success: true, response });
                        return of(new campaignAction.GetCampaignProductUserCountSuccessAction(response));
                    }),
                    catchError(error => {
                        action.payload.callback && action.payload.callback({ success: false });
                        return of(new globalActions.PopupNotificationAction({
                            actionType: campaignAction.ActionTypes.GET_CAMPAIGN_PRODUCT_USER_COUNT,
                            messageType: MessageType.Error,
                            message: error.error.message,
                            extraParameters: null,
                            error: error.error,
                            title: MESSAGE_CONSTANTS.CAMPAIGN_TITLE
                        }))
                    }));
        })
    );

我是否可以使用相同的回调方法,或者我必须订阅?

我是新的rxjs,所以不知道是否有什么错误的选择正确的操作符或它的其他东西。

虽然您退订了,但您正在重新使用该动作和效果。您仍然调用相同的成功操作,即GetCampaignProductUserCountSuccessAction。因此,它将调用相同的reducer,并且您之前的数据将被覆盖。

首先,您不应该在多个作业中重用操作。每个动作都应该有一个特定的角色来完成[单一的职责]。效果也是一样。

您可以使用公共服务来获取资源。

另外,你在你的效果中使用了combineLatestFrom,但是我没有看到任何用法

相关内容

  • 没有找到相关文章

最新更新