javascript - 如何在 native react 中访问从 firebase 数据库检索到的完整数组?

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

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(); 它返回空数组,但如果控制台记录它,我得到数组, 请帮忙。

最佳答案

如果您在 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
});

关于javascript - 如何在 native react 中访问从 firebase 数据库检索到的完整数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58900126/

相关文章:

javascript - 使用 Javascript 检测输入(文本)中的放置事件

javascript - Redux - 让不可能的状态成为可能

java - 单击下拉菜单中的项目后更改 RecyclerView 内容

android - Firebase 通知在后台不工作

reactjs - React 路由器不刷新页面

java - 多个 FireBase 监听器调用,有异常吗?

javascript - 停止用户再次向前导航

javascript - jQuery.each() 类示例将 Div 文本附加到 Li

javascript - Symfony2 : JavaScript doesn't work on Prod environment

javascript - JSX: <div> 需要相应的结束标记