2016-01-10 4 views
19

私はいくつかのデータを更新する簡単なFirebase関数を持っています。しかし、インタプリタは、最初の引数にはプロパティ 'users.tester1'に "undefined"が含まれていると言います。誰かが私を助けてくれる?Firebase.update failed:最初の引数にはプロパティで未定義が含まれています

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

答えて

29

オブジェクトをFirebaseに渡すと、プロパティの値は値またはnull(この場合はプロパティが削除されます)になります。彼らはundefinedになることはできません。それはあなたがエラーに応じて渡しているものです。単に孤立してこのスニペットを実行している

問題を示しています。中に

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

結果:

{名:未定義、フィラー:未定義}

私の最善の策は、ということですキー/値のペアを偶数/奇数のパラメータとしてobjifyに渡したいとします。で

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

結果::

{名: "フィラー"}

+1

ありがとうを!私はバックエンドのWeb開発者ではありません。私はただの愛好家です。私の友達と私は通常、Unityでゲームをします。このプロジェクトは単に私たちがクールだと思ったものです。 – jonathanhuo11

+0

私は変数 'pub.email'、' pub.displayName'などを宣言しました。私はこのエラーを受け取りました。たとえば、これらの宣言に 'pub.email = null;'を追加したところ、エラーはなくなりました。 '.onAuthStateChanged'はユーザがサインインしているかどうかに応じてそれらを埋め込みます。 –

0

などはすべてundefined値にする必要がある、上記の言った場合、あなたはに機能を変更したいですfirebaseに空の値として保存したい場合はnullになります。

このアプローチを使用して、ネストされた値をすべて修正します。

//to search and replace  
    const replaceAll =(s="",f="",r="")=> s.replace(new RegExp(f.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'), 'g'), r) 

    //to save 
    firebase.database().ref(`path`).update(JSON.parse(replaceAll(JSON.stringify(val),"undefined","null"))) 
0

必ずあなたのオブジェクトは、未定義の小道具は、この単純なトリックを使用含まれていないようにする:このcodePenを見てみましょう詳しくは

JSON.parse(JSON.stringify(YourJsonData)) 

を:http://codepen.io/ajmueller/pen/gLaBLX

関連する問題