我只有一次数据库输出,但不是。为什么不这样做?

时间:2016-02-11 19:00:16

标签: javascript database firebase

我在firebase中为Web应用程序工作。我第一次做查询工作,然后我添加了第二个参考,它打破了。在这样做的时候,我回到以前工作的时候,它也不再工作了。我在控制台中没有出错。

  function displayMessage(){
      var messageId;
      alert("Firebase Initializing UserID: " + Parse.User.current().id);
    var reference = new Firebase("https://gibber.firebaseio.com/Recent");
    reference.orderByChild("userId").equalTo(Parse.User.current().id).on("child_added", function(snapshot) {
        alert(snapshot.key());
        messageId = snapshot.key();
        });
    var reference2 = new Firebase("https://gibber.firebaseio.com/Recent");
    reference2.child(messageId+"/lastMessage").on("value", function(snapshot) {
      alert(snapshot.val());///snapshot should be last message
    });
  };

enter image description here

1 个答案:

答案 0 :(得分:2)

您的代码嵌套已关闭,很难发现,因为缩进很麻烦。

这有效:

var userId = 'sKdkC6sGYb';
var ref = new Firebase("https://gibber.firebaseio.com/Recent");
ref.orderByChild("userId").equalTo(userId).on("child_added", function(snapshot) {
    console.log('child_added: '+snapshot.key());
    var messageId = snapshot.key();
    ref.child(messageId+"/lastMessage").on("value", function(othersnapshot) {
        console.log('value: '+othersnapshot.val());///snapshot should be last message
    });
});

我不确定为什么你采用这种经过两次查询的方法,lastMessage属性已在外部快照中可用:

var userId = 'sKdkC6sGYb';
var ref = new Firebase("https://gibber.firebaseio.com/Recent");
ref.orderByChild("userId").equalTo(userId).on("child_added", function(snapshot) {
    console.log('child_added: '+snapshot.key());
    console.log('value: '+snapshot.val().lastMessage);
});

请参阅:http://jsbin.com/bikoni/edit?js,console