2017-02-12 17 views
0

私は1255人以上の子供がいる場合、ノードjsサーバーを起動するとfirebase-adminパッケージを使用して最大コールスタックサイズを超えました私が「追加された子に」を使用するのを聞いていることを参照してください。最大コールスタックサイズを超えましたクラッシュ - 子が追加されたリスナーのFirebase

FIREBASE WARNING: Exception was thrown by user callback. RangeError: Maximum call stack size exceeded 

私は私の子供にlimitToLast(1255)を追加しない場合は、リスナー(または1255未満のもの)を加え、クラッシュが発生し続けています。

すべて以前の値は、プログラムのクラッシュなしに大小にかかわらず存在するか追加されていますが、これを行う方法がわかりません。

( 'value')は、データベース参照の> 10kノードで完全に動作しますが、最初はすべての値を検索したときに '追加された子'ではありません。

「子供が削除されました」と同じ問題が発生します。

messageRef.on('child_added', function(snapshot) { 

     var payload = {}; 

     var msgKey = snapshot.key; 
     var msgName = snapshot.child('name').val(); 
     var msgContent = snapshot.child('msg').val(); 
     var msgTime = snapshot.child('time').val(); 

     var message = {msg: msgContent, name: msgName, time: msgTime}; 

     payload['messages/' + msgKey] = message; 

     ref.update(payload); 

    }); 

おかげで任意の助けのために非常に多くの:

は、ここに私の '子が追加' コードです!

+0

あなたは 'の( 'child_added')'コードを共有することができます:

はとのあなたの最後の6文を置き換えますか? –

+0

私はそれを追加しました、ありがとう:) – Aretyper

+0

なぜあなたはエラーが発生しているのか分かりませんが、私が気付くことは、 'snapshot.val()。name'とFirebaseのデータベースへの別の呼び出しを避けてください(Firebaseがこれを最適化している場合を除く)。ですから、あなたの3つの 'snapshot.child'呼び出しを' snapshot.val().name'(そしてmsgとtime)で置き換えようと思います。 'ref.update(payload)'を削除しても問題は解決しますか? –

答えて

1

setは、いくつかの制限を回避する簡単な操作です。また、refに渡されたパスの先頭に/という接頭辞を付けて、ルートノードからの参照を保証します。

const message = snapshot.val(); 
const name = message.name; 
const content = message.content; 
const time = message.time; 

firebase.database().ref(`/messages/${msgKey}`).set({name, msg, time}) 
関連する問題