如何在初始push()中将唯一ID插入Firebase项目?

时间:2014-10-21 07:37:35

标签: firebase

push()与Firebase一起使用时,Firebase会生成唯一ID,例如-JZl_BbXymAnOCPppMzN。我试图弄清楚是否有任何方法可以将该ID放入我在第一个push()期间推送的项目中。例如,假设我正在推送一个项目:

var uid = "notset";
uid = fb.push({Name: name, Status: status, Position: position, UID: uid});

在此示例中,uid.name()拥有我的唯一ID。所以我的第一个想法是用我现在知道的唯一ID来更新项目,例如:

var uidname = uid.name();
fb.child(uid.name()).update({UID: uidname});

这确实有用。

但是,我还依靠on()来检测添加的孩子,这样我就可以在他们到达时处理它们。例如:

fb.on('child_added',function(dataSnapshot) {
      var newstatus = dataSnapshot.val();
      var status = newstatus.Status;
      var name = newstatus.Name;
      var position = newstatus.Position;
      var uid = newstatus.UID;
      console.log
        ("Name: "+name+", Status: "+status+", Position: "+position+", UID: "+uid);
});

但由于Firebase的异步特性,此on()会在push()之后但update()之前运行。因此,console.log()打印出notset的uid,而不是正确的UID。

我应该遵循不同的策略吗?我想我可以生成自己的UID并使用firebaseRef.child('myUID').set()将它们推送到Firebase,但似乎必须有一个更简单的方法吗?

2 个答案:

答案 0 :(得分:3)

Firebase的push是客户端操作,因此尚未向服务器发送任何内容。

您可以将其分成两个单独的调用,而不是一次性调用push 数据:

var ref = fb.push(); 
/* use ref.name() here*/ 
ref.set({Name: name, Status: status, Position: position, UID: uid});

答案 1 :(得分:0)

不确定这会有效,但试试这个:

  1. 在fb.push中,不要设置UID,将其留空,firebase将生成它。
  2. 在fb.on中,而不是newstatus.UID使用dataSnapshot.name()