Firebase / ReactJS,获取数据库中的最后一个查询

时间:2018-09-25 17:01:32

标签: javascript reactjs firebase firebase-realtime-database

我是Firebase和reactjs的新手。我想知道ID值 带firebase的reactjs中最后插入的查询的内容。谢谢

firebase.database().ref().child("clients").orderByChild("ID").limitToLast(1)("value", function (snapshot) {
  snapshot.forEach(function(childSnapshot) {
    var cellNum=childSnapshot.val().CellNum;

  });
});

this.setState(
{
  ID: cellNum

}, () => {

});

enter image description here

1 个答案:

答案 0 :(得分:0)

其原因是Firebase异步加载数据。由于这可能需要一些时间,因此它允许您的代码继续。然后,一旦数据可用,它将使用数据快照调用回调。

用一些放置合理的日志语句最容易看到这一点:

console.log("Before starting query")
firebase.database().ref().child("clients").orderByChild("ID").limitToLast(1)("value", function (snapshot) {
  console.log("Got data");
});
console.log("After starting query")

运行此代码时,它会打印:

  

开始查询之前

     

开始查询后

     

获得数据

这可能不是您期望的顺序。但这完美地说明了为什么您的代码中的setState调用失败。调用setState时,数据尚未加载。

cellNum仅在回调内部可用。因此,对setState的调用也必须在该回调中:

firebase.database().ref().child("clients").orderByChild("ID").limitToLast(1)("value", function (snapshot) {
  snapshot.forEach(function(childSnapshot) {
    var cellNum=childSnapshot.val().CellNum;
    this.setState({
      ID: cellNum
    }, () => { });
  });
});