则无法读取未定义的属性

时间:2019-02-13 09:19:03

标签: reactjs

我想加载一些数据而不刷新页面。为此,我轮询数据。但是,这样做时,出现控制台错误“无法读取未定义的属性”,并得到期望的输出。我仍然想摆脱控制台中的此错误。我理解它引发该错误,因为最初没有返回任何数据。但是有人可以帮我吗...

下面是代码,

componentDidMount() {
    this.start_polling();
}

componentWillUnMount() {
    this.stop_polling();
}

start_polling = () => {
    if (!this.is_polling) {
        this.is_polling = true;
        this.poll();
    }
 };

 poll = () => {
     if (this.is_polling) {
         this.poll_timeout = setTimeout(() => {
             this.load_data()
                 .then(this.poll)
                 .catch(this.stop_polling);
         }, poll_interval_ms);
     }
 };

 stop_polling = () => {
    clearTimeout(this.poll_timeout);
    this.is_polling = false;
 };

 load_data = () => {
    const file_name = 'file.json';
    client.get_data_file(this.props.id, file_name, 'json')
        .then((request) => {
            const data = component_name.filter_data(request.response);
            const sorted_data = component_name.sort(data);
            this.data = sorted_data;
            this.setState({final_dat: [this.data]});
        })
        .catch((error) => {
          //something
        });
};

1 个答案:

答案 0 :(得分:1)

问题在于load_data没有返回任何内容,但是您期望它返回一个Promise,并对返回的值执行.then()。只需在load_data上添加一个收益,就可以设置:

load_data = () => {
    const file_name = 'file.json';
    return client.get_data_file(this.props.id, file_name, 'json')
        .then((request) => {
            const data = component_name.filter_data(request.response);
            const sorted_data = component_name.sort(data);
            this.data = sorted_data;
            this.setState({final_dat: [this.data]});
        })
        .catch((error) => {
          //something
        });
};

当然,请确保client.get_data_file也正确返回了一个诺言。