Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在react native中访问从firebase数据库检索的完整数组?_Javascript_Reactjs_Firebase_React Native_Firebase Realtime Database - Fatal编程技术网

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

Javascript 如何在react native中访问从firebase数据库检索的完整数组?,javascript,reactjs,firebase,react-native,firebase-realtime-database,Javascript,Reactjs,Firebase,React Native,Firebase Realtime Database,当我赋值一个数组变量时,比如 temp_arr=snapshot.child(sub_roll.val(); 它返回空数组,但如果控制台记录它,我会得到数组, 请提供帮助。如果将数组变量分配给值事件之外的结果,那么它将返回空值,因为once()是异步的,这意味着它不会等到检索到数据,因此如果执行此操作: REACT NATIVE CODE constructor(props) { super(props); this.state = { day: '',

当我赋值一个数组变量时,比如 temp_arr=snapshot.child(sub_roll.val(); 它返回空数组,但如果控制台记录它,我会得到数组,
请提供帮助。

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

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
将返回一个空数组。您需要执行以下操作:

    db.ref(date_class).once('value', function(snapshot) {
        console.log(snapshot.child(sub_roll).val());
    });
     temp_arr = snapshot.child(sub_roll).val();
};
    db.ref(date_class).once('value', function(snapshot) {
        temp_arr = snapshot.child(sub_roll).val();
        console.log(temp_arr);
    });
};
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);
    });
  });
};
要在
事件之外访问它,请执行以下操作:

    db.ref(date_class).once('value', function(snapshot) {
        console.log(snapshot.child(sub_roll).val());
    });
     temp_arr = snapshot.child(sub_roll).val();
};
    db.ref(date_class).once('value', function(snapshot) {
        temp_arr = snapshot.child(sub_roll).val();
        console.log(temp_arr);
    });
};
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);
    });
  });
};
然后在调用函数时,执行以下操作:

    db.ref(date_class).once('value', function(snapshot) {
        console.log(snapshot.child(sub_roll).val());
    });
     temp_arr = snapshot.child(sub_roll).val();
};
    db.ref(date_class).once('value', function(snapshot) {
        temp_arr = snapshot.child(sub_roll).val();
        console.log(temp_arr);
    });
};
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);
    });
  });
};

嘿,彼得,谢谢你这么快的回复。但是我想在整个程序中使用fiebase提供的数组,在值事件之外,那么我该怎么做呢??