【问题标题】:How to access a full array retrived from firebase database in react native?如何在本机反应中访问从firebase数据库检索的完整数组?
【发布时间】:2020-03-12 23:17:30
【问题描述】:
REACT NATIVE CODE
    constructor(props) {
    super(props);
    this.state = {
        day: '',
        month: '',
        year: '',
        asked_dat: '',
        asked_clas: 'CLASS',
        asked_su: 'SUBJECT'
    };
}

set_date = () => {
    this.setState({
        asked_dat: this.state.day + '-' + this.state.month + '-' + this.state.year
    });
};
retrieve_data = () => {
    var asked_date = this.state.asked_dat;
    var asked_class = this.state.asked_clas + '/';
    var asked_sub = this.state.asked_su;
    var date_class = asked_date + '/' + asked_class;
    var sub_roll = asked_sub + '/' + 'PRESENT_ROLL_NO';

    console.log(date_class + sub_roll);
    db.ref(date_class).once('value', function(snapshot) {
        console.log(snapshot.child(sub_roll).val());
    });
};

当我分配一个数组变量时 temp_arr = snapshot.child(sub_roll).val(); 它返回空数组但如果控制台记录它我得到数组, 请帮忙。

【问题讨论】:

    标签: javascript reactjs firebase react-native firebase-realtime-database


    【解决方案1】:

    如果您将数组变量分配给value 事件之外的结果,那么它将返回空,因为once() 是异步的,这意味着它不会等到数据被检索到,因此如果您这样做:

        db.ref(date_class).once('value', function(snapshot) {
            console.log(snapshot.child(sub_roll).val());
        });
         temp_arr = snapshot.child(sub_roll).val();
    };
    

    temp_arr 将返回一个空数组。您需要执行以下操作:

        db.ref(date_class).once('value', function(snapshot) {
            temp_arr = snapshot.child(sub_roll).val();
            console.log(temp_arr);
        });
    };
    

    要在value 事件之外访问它,请执行以下操作:

    retrieve_data = () => {
     return  new Promise((resolve, reject) => {
        var asked_date = this.state.asked_dat;
        var asked_class = this.state.asked_clas + '/';
        var asked_sub = this.state.asked_su;
        var date_class = asked_date + '/' + asked_class;
        var sub_roll = asked_sub + '/' + 'PRESENT_ROLL_NO';
    
        console.log(date_class + sub_roll);
        db.ref(date_class).once('value', function(snapshot) {
            temp_arr = snapshot.child(sub_roll).val();
            resolve(temp_arr);
        });
      });
    };
    

    然后在调用函数时执行以下操作:

    retrieve_data().then((value) => {
      console.log(value); //returns array
    });
    

    【讨论】:

    • 嘿,彼得,感谢您的快速响应。但是我想在值事件之外的整个程序中使用从 fiebase 获得的数组,所以我该怎么做呢??
    猜你喜欢
    • 1970-01-01
    • 2018-07-20
    • 2020-04-16
    • 2023-03-05
    • 2017-11-30
    • 2019-08-29
    • 2017-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多