【问题标题】:Redux: wait for an epic action to be finishedRedux:等待史诗般的动作完成
【发布时间】:2019-02-14 20:40:11
【问题描述】:

我正在使用react + redux + redux-observable

我有以下史诗般的动作:

export const fetchCompaniesEpic = (action$: Observable<Action>): Observable<Action> =>
    action$.pipe(
        ofType(FETCH_COMPANIES),
        take(1),
        switchMap((action: any) => WebServiceProxy.getCompanies().pipe(map((companies: Company[]) => fetchCompaniesFulfilled(companies))))
    );

执行一些异步操作,然后调用“正常操作”并获得结果:

export const fetchCompaniesFulfilled = (companies: Company[]) => ({ type: 'FETCH_COMPANIES_FULFILLED', companies });

然后在我的容器中,我以这种方式调度史诗动作:

const mapDispatchToProps: any = (dispatch: Dispatch<Action>, ownProps: any) => ({
    fetchCompanies: (): void => {
        dispatch({ type: FETCH_COMPANIES });
    }
});

一切都像一个魅力,但我怎么知道史诗动作什么时候结束?

我想做dispatch({ type: FETCH_COMPANIES }).subscribe(...)之类的事情

【问题讨论】:

  • @streletss 很抱歉我错误地拒绝了编辑

标签: reactjs typescript redux react-redux redux-observable


【解决方案1】:

目前我已经完成了以下解决方案,我发布它是为了了解您对此的想法并帮助其他人解决同样的问题。

我实现了一个 thunk,它可以满足我的需求。

这是重击动作:

export const fetchCompaniesThunk = () => {
    return (dispatch: any) => {
        return fetchCompanies().pipe(map((companies: Company[]) => dispatch(fetchCompaniesFulfilled(companies))));
    };
};

这是fetchCompaniesFulfilled 操作:

export const fetchCompanies = (): Observable<any> => {
    return WebServiceProxy.getCompanies().pipe(take(1));
};

从容器中我可以做到:

dispatch(fetchCompaniesThunk()).subscribe((data: any) => {
    console.log('finished to fetch companies', data);
});

即使解决方案运行良好,我也不是很满意。或者更好的是我的实际问题是:为什么我需要redux-observable

【讨论】:

    猜你喜欢
    • 2021-05-24
    • 2017-04-18
    • 2019-05-13
    • 1970-01-01
    • 1970-01-01
    • 2021-10-10
    • 2019-03-20
    • 2018-01-20
    • 1970-01-01
    相关资源
    最近更新 更多