将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,但似乎必须有一个更简单的方法吗?
答案 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)
不确定这会有效,但试试这个: