簡體   English   中英

Firebase RangeError:超出最大調用堆棧大小

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM