![](/img/trans.png)
[英]nodejs firebase error RangeError: Maximum call stack size exceeded failure
[英]Firebase RangeError: Maximum call stack size exceeded
以下是這個SO問題的Firebase讀取查詢性能測試,我只是將其更改為自己的Firebase實例,並刪除了順序測試,僅保留了並行測試。
問題是,每當我運行此代碼並且使for循環i < 12
導致數組長度為: 32,768
,我總是收到錯誤消息,表明調用堆棧已超出: RangeError: Maximum call stack size exceeded
超出了RangeError: Maximum call stack size exceeded
但我可以t找出導致此錯誤的原因...我嘗試在本地主機和通過雲函數進行測試,但均未成功。
(所引用的SO測試在i <12時有效,但如果將其更改為13也將中斷) 。
function loadVideosParallel(videoIds, callback) {
Promise.all(
videoIds.map((id) => {
return admin.database().ref("test").child(id).once('value')
.then((snapshot) => {
return snapshot;
})
})
).then((r) => callback());
}
function loadVideosForUser(loadVideosParallel, callback) {
admin.database().ref("test").once('value').then((snapshot) => {
var videoKeys = Object.keys(snapshot.val());
for (var i=0; i < 13; i++) {
videoKeys = videoKeys.concat(videoKeys);
}
loadVideosParallel(videoKeys, function() {
if (callback) callback();
});
})
}
let start = Date.now();
loadVideosForUser(loadVideosParallel, function() {
const endTime = (Date.now() - start)+'ms';
console.log('parallel done after '+ endTime +'ms');
});
2017-12-20T23:26:28.527ZE helloWorld:RangeError:在/ user_code / node_modules / firebase的T(/user_code/node_modules/firebase-admin/lib/database/database.js:139:366)超出最大調用堆棧大小ta(-/ user_code / node_modules / firebase-admin / lib / database / database.js:45:40)處在UA(-user / code / node_modules / firebase-admin / Ag(/user_code/node_modules/firebase-admin/lib/database/database.js:190:93)處在/ user_code / node_modules / firebase-admin / lib / database /中的lib / database / database.js:45:89) Oc(/user_code/node_modules/firebase-admin/lib/database/database.js:85:363)的Oc(/user_code/node_modules/firebase-admin/lib/database/database.js的database.js:195:260 :85:449)在Oc(/user_code/node_modules/firebase-admin/lib/database/database.js:85:449)在Nc(/user_code/node_modules/firebase-admin/lib/database/database.js:85 :316)2017-12-20T23:26:29.758741829ZD helloWorld:函數執行耗時5107毫秒,狀態為:“崩潰”
有人有見識嗎? 我嘗試查看/user_code/node_modules/firebase-admin/lib/database/database.js
文件,但該文件已縮小,因此無法真正知道發生了什么。
您要排隊的讀取操作超過32,768,這溢出了SDK中的堆棧之一。 在代碼中沒有任何流控制的情況下加載這么多項目似乎是一個壞主意,因此,我真的很高興SDK能夠解決問題。 考慮分批裝載更合理的物品。
總體而言:嘗試限制從數據庫中加載數千個項目。 如果你需要對一個聚合操作多個項目,你好得多在數據庫中明確地保持聚合值和每更新寫操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.