所以我有一个产品搜索效果。基本上,我第一次派遣search_start行动,其中有针对搜索参数的有效载荷,其效果需要的是然后去服务,我得到的是响应返回,这使我的产品列表。我希望能够再做两件事情:
我有一个问题,第二张,主要是因为这样做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())),
),
),
);
我不认为你需要明确定义返回类型。你可以用mergeMap
做到这一点并非如此。我看你把你的switchMap
和mergeMap
在倒车时,你只需要扭转的位置,你应该是好去。
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())),
),
),
);
我已经看到并亲自通过的共同做法是别名你的行动,即type SearchAction = SearchStart | SearchSave | SearchSuccess | SearchFail'
然后你的效果返回类型为Observable<SearchAction>
。然后打字稿将验证所有要退回的行动别名所覆盖。