Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Firebase.update failed : first argument contains undefined in property

I have a simple Firebase function that updates some data. However, the interpreter says that the first argument contains "undefined" in property 'users.tester1'. Can somebody help me please?

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.");   } }; 
like image 655
jonathanhuo11 Avatar asked Jan 10 '16 17:01

jonathanhuo11


2 Answers

When you pass an object to Firebase, the values of the properties can be a value or null (in which case the property will be removed). They can not be undefined, which is what you're passing in according to the error.

Simply running this snippet in isolation shows the problem:

var objify = function() {   var rv = {};     for (var i = 0; i < arguments.length; ++i)       rv[arguments[i]] = rv[arguments[i+1]];     return rv; } objify("name", "filler") 

Results in:

{name: undefined, filler: undefined}

My best bet is that you want to pass key/value pairs into objify as even/odd parameters. In that case you want to change the function to:

var objify = function() {   var rv = {};     for (var i = 0; i < arguments.length; i+=2)       rv[arguments[i]] = arguments[i+1];     return rv; } objify("name", "filler") 

Results in:

{name: "filler"}

like image 185
Frank van Puffelen Avatar answered Oct 15 '22 17:10

Frank van Puffelen


to make sure your object does not contain any undefined props use this simple trick:

JSON.parse( JSON.stringify(YourJsonData ) ) 

For more info take a look at this codePen: http://codepen.io/ajmueller/pen/gLaBLX

like image 21
Jeremy Souffir Avatar answered Oct 15 '22 16:10

Jeremy Souffir