有没有办法并行获取动作创建者?

时间:2019-04-22 11:06:40

标签: reactjs react-redux react-router

技术:react-thunk

我有一个基本组件,该组件包装并包含获取基本应用程序数据(数据库中的一些静态数据),因此我不想检查每个组件是否都已获取,然后再获取还是不获取等等。实体之间没有关系,因此我使用了Promise.all([]),因此以并行方式获取它们并将动作创建者传递给它,以便它可以解决它。同时,在获取所有数据之前,我将显示一个加载栏。我的问题很少发生。

.then()之后的7-8个页面中,有

1个刷新页面未将数据加载到Promise.all([])回调中。因此,如果您能指出问题所在和错误所在。

constructor(props) {
        super(props);
        this.state = {
            isLoading: true
        };
    }

    componentDidMount() {
        Promise.all([this.props.entities_1(),this.props.entities_2(),this.props.entities_3()])
            .then(() => {
                console.log('Fetching is finishing'); ---> So this line is executed 1 out 7-8 times before the fetching is finished.
                this.setState({ isLoading:false });
            });
    }

    render() {
        return (
            <div>
                {this.state.isLoading && <LoadingBar />}
                ..... other code
                }

            </div>

        );
    }
export function mapDispatchToProps(dispatch) {
    return {
        entities_1: () => dispatch(entities_1()),
        entities_2: () => dispatch(entities_2()),
        entities_3: () => dispatch(entities_3())
    };
}

这是我的行动创造者,看起来像:

export function entities_1() {
    return async dispatch => {
        try {
            dispatch(REQUEST);
            const response = await getSmth();
            dispatch(SUCCESS(response));
        } 
        catch (error) {
            dispatch(FAILURE(error));
        }
    };
}

0 个答案:

没有答案