Вам необходимо использовать switchMap/mergeMap/concatMap/exhaustMap
, чтобы "распаковать" наблюдаемое, поступающее из службы HTTP -> результат switchMap
-> map
в действие , например, ваш эффект должен возвращать действия (такие как это просто эффект по умолчанию с диспетчеризацией действия.)
Кроме того, я предлагаю, чтобы метод API имел изменения в качестве параметров, а не действие.
updateCohort$ = createEffect(() =>
this.actions$.pipe(
ofType(getCohortActions.updateActiveCohort.type),
withLatestFrom(this.store.pipe(select(activeCohort))),
switchMap(([action, cohort]) =>
this.cohortFeaturesServices.updateCohorts(action.changes, cohort)
),
map((result: CohortUpdateResponse) => successCohortUpdateAction())
)
)
public updateCohorts(changes: Partial<Cohort>, cohort: Cohort): Observable<CohortUpdateResponse> {
const url = `api/services/cohorts/frontend/`;
return this.http.patch(`${url}/${cohort.id}/`, changes);
}
Что-то вроде этого.
PS добавил несколько «изобретенных» типов, чтобы показать, что происходит и где
PSS не проверял опечатки в коде, такой письменный ответ прямо в окне ответа
GL: )