web-dev-qa-db-fra.com

Firebase.update a échoué: le premier argument contient undefined in property

J'ai une simple fonction Firebase qui met à jour certaines données. Cependant, l'interprète dit que le premier argument contient "indéfini" dans la propriété "users.tester1". quelqu'un peut m'aider s'il vous plait?

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.");
  }
};
35
jonathanhuo11

Lorsque vous transmettez un objet à Firebase, les valeurs des propriétés peuvent être une valeur ou null (auquel cas la propriété sera supprimée). Ils ne peuvent pas être undefined, c'est ce que vous transmettez en fonction de l'erreur.

Exécuter simplement cet extrait isolément montre le problème:

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")

Résulte en:

{nom: non défini, remplisseur: non défini}

Mon meilleur pari est que vous voulez passer des paires clé/valeur dans objify en tant que paramètres pairs/impairs. Dans ce cas, vous souhaitez modifier la fonction pour:

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")

Résulte en:

{nom: "remplisseur"}

40
Frank van Puffelen

pour vous assurer que votre objet ne contient aucun accessoire indéfini, utilisez cette astuce simple:

JSON.parse( JSON.stringify(YourJsonData ) )

Pour plus d’informations, jetez un oeil à ce code code: http://codepen.io/ajmueller/pen/gLaBLX

18
Jeremy Souffir