我有一个简单的Firebase函数来更新一些数据。但是,解释器说第一个参数在属性'users.tester1'中包含“undefined”。有人能帮帮我吗?
var objify = function() {
var rv = {};
for (var i = 0; i < arguments.length; ++i)
rv[arguments[i]] = rv[arguments[i+1]];
return rv;
}
addUser("tester1", []);
var addUser = function(name, edges){
if(!checkIfUsernameExists(name) && !checkIfNodeNameExists(name) && !checkIfEdgeNameExists(name)){
var time = Firebase.ServerValue.TIMESTAMP;
//HERE: I think the error is on this line
refs.users.update(objify(name, "filler"));
refs.users.child(name).set({
"id" : time,
"edges" : "filler"
});
refs.users.child(name).child("edges").update({
"to" : "filler",
"from" : "filler"
});
addNode(new Node(name, time, name));
for(var e in edges){
refs.users.child(name).child("edges/to").update(objify(edges[e].name, true));
addEdge(new Edge(edges[e].name, time, edges[e].to, edges[e].arrows));
//TODO add a "from" edge so that you know who wants to eat you
}
refs.users.child(name).child("edges/to").set({"filler" : null});
} else {
alert("user/node/edge name taken.");
}
};
5条答案
按热度按时间vecaoik11#
当你把一个对象传递给Firebase时,属性的值可以是一个值或空值(在这种情况下,属性将被删除),但不能是
undefined
,这是你根据错误传递的值。简单地单独运行这个代码片段就会发现问题:
结果:
{name:未定义,填充符:未定义}
最好的办法是将键/值对作为奇/偶参数传入
objify
,在这种情况下,可以将函数改为:结果:
{name:"填充物"}
vhipe2zx2#
要确保你的对象不包含任何未定义的 prop ,使用这个简单的技巧:
欲了解更多信息,请看这个代码笔:http://codepen.io/ajmueller/pen/gLaBLX
nzkunb0c3#
底层的Firebase库在你试图用undefined值更新属性时抛出一个错误,它允许null(并且基本上忽略它们)。
您需要原始转换器来确保它忽略所有原型方法和属性,并将undefined转换为null,或者删除所有具有undefined值的属性。
mznpcxlj4#
如上所述,如果你想在firebase中保存为空值,你需要所有的
undefined
值都是null
。我采用这种方法来纠正所有嵌套的值。
dsekswqp5#
我使用了
Object.keys()
方法: