2017-02-12 71 views
0

如果我有1255个或更多的孩子在启动我的节点js服务器(使用firebase-admin软件包)时,我已经获取了超出最大调用堆栈大小的崩溃。我正在使用'关于添加的孩子'的参考资料。最大调用堆栈大小超出崩溃 - Firebase添加子监听器

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

如果我不加limitToLast(1255)我的孩子添加监听器(或任何小于1255),崩溃持续出现。

我想收听全部以前存在或添加的值无论程度如何,都不会崩溃,但我不确定如何操作。

on('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')'的代码? –

+0

我已经添加了,谢谢:) – Aretyper

+0

不知道为什么你会收到错误,但我注意到的一件事是,当你可以调用'snapshot.val().name'时调用'snapshot.child'和避免再次调用Firebase的数据库(除非Firebase正在优化此功能)。所以我会尝试用'snapshot.val().name'(以及msg和time)替换你的3'snapshot.child'调用。在删除'ref.update(有效载荷)'时,你还会遇到问题吗? –

回答

1

set是一个更简单的操作,可能会避免一些限制。另外,我会将传递到ref的路径加上/作为前缀,以确保从根节点引用。

更换你的最后6条语句用:

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}) 
相关问题