Итак, у меня есть эффект поиска товара.По сути, я сначала отправляю действие search_start, у которого есть полезная нагрузка параметров для этого поиска. Затем происходит переход к услуге, и я получаю ответ, который дает мне список продуктов.Затем я хочу сделать две вещи:
- Отправить успешное действие с набором продуктов
- Сохранить параметры для этого поиска, чтобы позже использовать их для «истории поиска».который в настоящее время находится в 'action.payload'
У меня проблема 2-й части, в основном потому, что выполнение switchMap и наличие returnType '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())),
),
),
);