2017-02-12 79 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}) 
相關問題