Как вернуть массив из функции реагировать на родную? - PullRequest
0 голосов
/ 15 апреля 2020

Это мой первый раз, когда я работаю с реагировать на выставку, и я хочу вернуть массив для создания динамических c компонентов на основе этого массива, но моя функция не возвращается. Ниже мой код:

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 не содержит ничего. Это результат, который я получаю, когда консоль регистрирует его

return: undefined

Пожалуйста, помогите!

Ответы [ 2 ]

0 голосов
/ 15 апреля 2020

Выполнение кода JS является асинхронным. Получение базы может занять некоторое время.

Вы можете использовать метод asyn c, чтобы справиться с этим. Сделайте свой метод asyn c, как показано ниже.

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;
}
0 голосов
/ 15 апреля 2020

Сделайте функцию asyn c. В документах он возвращает обещание, поэтому его нужно ждать.

getgroups = asyn c () => {

А затем

   returnarry = await firebase
    .database() 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...