如何从函数反应本机返回数组?

时间:2020-04-15 08:36:07

标签: reactjs firebase expo

这是我第一次使用react expo,我想返回数组以基于该数组创建动态组件,但是我的函数没有返回。下面是我的代码:

getgroups = () => {
  // getting data once
  var arraykey = [];
  var returnarry = [];
  returnarry = firebase
    .database()
    .ref('/groupsOfUser/' + this.state.uid)
    .once('value')
    .then(snapshot => {
      snapshot.forEach(function(childSnapshot) {
        var childKey = childSnapshot.key;
        console.log(childKey);
        arraykey.push(childKey);
      }); 
      console.log(arraykey); 
      return arraykey;
    }); 
    console.log('return:' + returnarry[0]);
  } 
}

returnarry不包含任何内容。这是我在控制台登录时得到的结果

返回:未定义

请帮助!

2 个答案:

答案 0 :(得分:0)

使其具有异步功能。在文档上,它返回一个承诺,因此必须等待它。

getgroups = async()=> {

然后

   returnarry = await firebase
    .database() 

答案 1 :(得分:0)

JS代码执行是异步的。火力地堡获取可能需要一些时间。

您可以使用async方法来处理此问题。使您的方法异步,如下所示。

getgroups = async() => {
  // getting data once
  var arraykey = [];
  var returnarry = [];
  returnarry = await firebase
    .database()
    .ref('/groupsOfUser/' + this.state.uid)
    .once('value')
    .then(snapshot => {
      snapshot.forEach(function(childSnapshot) {
        var childKey = childSnapshot.key;
        console.log(childKey);
        arraykey.push(childKey);
      }); 
      console.log(arraykey); 
      return arraykey;
    }); 
  }
  console.log('return:' + returnarry[0]);
  return returnarry;
}