使用expo从Firebase提取数据时返回null

时间:2019-01-06 21:12:34

标签: firebase react-native firebase-realtime-database google-cloud-firestore expo

我正在尝试从EXPO应用程序中的Firebase获取数据 所以这是我实现此代码的组件:

import firebase from 'firebase';

// Initialize Firebase
var config = {
    apiKey: "AIzaSyAVf",
    authDomain: "d07f5.firebaseapp.com",
    databaseURL: "https://d07f5.firebaseio.com",
    projectId: "d07f5",
    storageBucket: "d07f5.appspot.com",
    messagingSenderId: "66392528"
  };
  firebase.initializeApp(config);

const api = 
    firebase.database().ref('/Barbers').on('value', (snapshot) => {
        console.log('testing')
        console.log(snapshot.val())
    });

  export default {
    getBarbersShops,
  }

当我在Android设备上运行该应用程序并从浏览器的控制台查看远程调试时,我发现了我在控制台中为该控制台编写的“测试”一词:

console.log(snapshot.val())

我只是为此而为空,不知道为什么?

这是要在Firebase中收集的图像:

enter image description here

2 个答案:

答案 0 :(得分:3)

由于您的代码正在访问Firebase Realtime数据库,所以您将获得null,但是数据图片显示该数据存储在Cloud Firestore中。这些不是相同的产品-它们既不共享相同的数据,也不共享相同的API。

答案 1 :(得分:2)

doug stevensons的答案是完全正确的!要使用响应本机从firestore中获取文档,可以使用以下代码:

import firebase from 'react-native-firebase'

myFunction(){
    firebase.firestore().collection('Barbers').doc('9R4t...').get().then(doc => {
       if(doc.exists){
          console.log(doc.data().name);  // testing
       }
    }
}

或异步:

async myFunctionAsync(){
    const doc = await firebase.firestore().collection('Barbers').doc('9R4t...').get();

    if(doc.exists){
       console.log(doc.data().name);  // testing
    }
}