2017-02-12 5 views
0

1255 명 이상의 자식이있는 경우 firebase-admin 패키지를 사용하여 노드 js 서버를 시작할 때 최대 호출 스택 크기가 초과되었습니다. 내가 '아이를 추가 할 때'라는 말을 듣고 있다는 것을 참고하십시오. 내가 추가하지 않으면 최대 호출 스택 크기를 초과했습니다. - 추가 된 수신기의 Firebase

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

내 아이에게 limitToLast(1255)은 수신기 (또는 아무것도 1,255 이하), 충돌이 발생 계속 추가.

모두 이전 값은 무시하고 크기에 상관없이 프로그램의 충돌없이 추가되지만이 방법은 확실하지 않습니다.

('값')은 데이터베이스 참조에서> 10k 노드와 완벽하게 작동하지만 처음에는 모든 값을 조회 할 때 '추가 된 자식'이 아닙니다.

'on child removed'와 (과) 동일한 문제가 발생합니다.

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'을 호출 할 수있을 때'snapshot.child'를 호출하고 있다는 것입니다. 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}) 
관련 문제