Чтение из базы данных firebase и сохранение данных, возвращение значений для использования на других страницах - PullRequest
0 голосов
/ 30 мая 2020

Сначала я пытаюсь получить данные из firebase, затем вызываю функцию для обновления внешней переменной (setdata). Однако функция создает локальную переменную и не обновляет внешнюю.

Мне было интересно, как я могу обновить внешнюю переменную?

import * as firebase from 'firebase';

function userData() {  
  var userInfo 

  firebase.auth().onAuthStateChanged(user => {
    if (user) {
      getUserData(user.uid)
    }
  })

  function getUserData(uid) {
    firebase
     .database()
     .ref('users/' + uid)
     .once("value")
     .then(function (snapshot){
        setData(snapshot.val())
      })
  }

  function setData(data){
    userInfo.name = data.name;
    userInfo.username = data.username;
  }

  return({ nameOf: userInfo.name, usernameOf: userInfo.username});
}

export default userInformation = {
  name: userData().nameOf,
  username: userData.usernameOf,
}

Ответы [ 2 ]

0 голосов
/ 31 мая 2020

Сделал следующее и получил результаты:


var usr = firebase.auth().currentUser;
var usrId = usr.uid;
var ref = firebase.database().ref('users/' + usrId)

var latestSnapshot = null;
ref.on('value', function(snap) { latestSnapshot = snap.val(); });

export default latestSnapshot````
0 голосов
/ 30 мая 2020

Думаю, проблема в том, как вы с ней справились. Пожалуйста, попробуйте этот способ и дайте мне знать, сработало ли это. Он должен работать ...

userData.js

export default function userData() {
  return firebase.auth().onAuthStateChanged((user) => {
    if (user) {
      return getUserData(user.uid);
    }
  });

  function getUserData(uid) {
    return firebase
      .database()
      .ref('users/' + uid)
      .once('value')
      .then(function (snapshot) {
        const data = snapshot.val();
        return { name: data.name, username: data.username };
      });
  }
}

Если вы хотите использовать вышеуказанную функцию,

import userData from 'path/to/userData/js';

const userInformation = userData();
...