Javascript 反应本机Firebase ref.一旦未点火

Javascript 反应本机Firebase ref.一旦未点火,javascript,reactjs,firebase,react-native,firebase-realtime-database,Javascript,Reactjs,Firebase,React Native,Firebase Realtime Database,我正在运行一个带有firebase数据库的react本机项目 这是我第一次尝试的: firebase.database.ref("foo").once("value", function(s){console.log(s);}); 直观地说,我认为在某个时候会调用它,如果foo不存在,它将返回一个空快照。但这永远不会发生 于是我试着: var fooRef = firebase.database.ref("foo"); fooRef.once("value", function(s){cons

我正在运行一个带有firebase数据库的react本机项目

这是我第一次尝试的:

firebase.database.ref("foo").once("value", function(s){console.log(s);});
直观地说,我认为在某个时候会调用它,如果foo不存在,它将返回一个空快照。但这永远不会发生

于是我试着:

var fooRef = firebase.database.ref("foo");
fooRef.once("value", function(s){console.log(s);});
这也不会开火。也没有:

var fooRef = firebase.database.ref("foo");
fooRef.once("value").then(function(s){console.log(s);});
但是,

var fooRef = firebase.database.ref("foo");
fooRef.set("bar");
fooRef.once("value", function(s){console.log(s);});
它会开火。在此之后,任何其他键上的其他读取都不起作用——它只读取上一条指令中写入的内容

我花了大约5个小时尝试firebase的所有故障排除技巧,现在我非常沮丧,因为这似乎在它声称的任何方式下都不起作用。读/写用户ref在index.android.js中工作正常,但fooRef仅在index.android.js中工作

编辑:在下面添加完整代码:

async getItems(obj, end_id) {
        uid = await AsyncStorage.getItem("@user:uid");
        console.log("User id: " + uid)
        console.log("App: " + firebase.database().app.name);
        var listening = true;
        firebase.database().ref("/user/" + uid + "/seen").once("value", function (snapshot) {
            console.log("Got snapshot for seen reference.")
            data = snapshot.val();
            discount = data.split(",");
            console.log(discount)
            cards = []
            console.log("Waiting to populate cards...");
            listening = false;
        });
        console.log("Attempted to receive reference of seen.");
        while(listening); listening=true;
        firebase.database().ref("/users/"+uid).once("value", function(snapshot) {
            console.log("Got snapshot of users.");
            data = snapshot.val();
            if (discount.indexOf(data.id) < 0) {
                cards.unshift({
                    heading: data.title, subtitle: data.category,
                    image: data.uri, likes: data.likes,
                    id: data.id
                });
            }
            listening = false;
            waiting = false;
        });
        while (cards.length == 0); waiting = false; obj.setState({});
}
....
constructor(props) {
    super(props)
    getItems(this,99999)
}
//waiting is a global variable
async getItems(obj,end\u id){
uid=wait AsyncStorage.getItem(“@user:uid”);
日志(“用户id:+uid”)
log(“App:+firebase.database().App.name”);
var=true;
firebase.database().ref(“/user/”+uid+“/seen”)。一次(“值”,函数(快照){
log(“获取快照以供参考”)
data=snapshot.val();
折扣=数据分割(“,”);
console.log(折扣)
卡片=[]
日志(“等待填充卡…”);
倾听=错误;
});
log(“试图接收SEED的引用”);
while(倾听);倾听=真实;
firebase.database().ref(“/users/”+uid).once(“value”,函数(快照){
log(“获取用户的快照”);
data=snapshot.val();
if(贴现指数of(数据id)<0){
卡片。取消移位({
标题:data.title,副标题:data.category,
image:data.uri,likes:data.likes,
id:data.id
});
}
倾听=错误;
等待=错误;
});
while(cards.length==0);waiting=false;obj.setState({});
}
....
建造师(道具){
超级(道具)
getItems(此,99999)
}
//等待是一个全局变量

Firebase.database是函数,您需要将
/
添加到ref,因为ref是数据库的路径,所以您应该这样编写

firebase.database().ref('/foo').once('value').then(function(s){console.log(s.val());})

Firebase.database是函数,您需要将
/
添加到ref,因为ref是数据库的路径,所以您应该这样编写

firebase.database().ref('/foo').once('value').then(function(s){console.log(s.val());})

用上面所有的方法都试过了,还是不起作用。@Woodworks您从构造函数调用getItems吗?你能把它移到componentDidMount生命周期方法吗?我回到了我第一次遇到这个问题时使用的代码,不知怎的,它神奇地开始工作了。。。我没有用上面所有的方法对其进行分类,仍然不起作用。@Woodworks您从构造函数调用getItems吗?你能把它移到componentDidMount生命周期方法吗?我回到了我第一次遇到这个问题时使用的代码,不知怎的,它神奇地开始工作了。。。我不知道