最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

Firebase RangeError:超出最大调用堆栈大小

运维笔记admin12浏览0评论

Firebase RangeError:超出最大调用堆栈大小

Firebase RangeError:超出最大调用堆栈大小

下面是来自this SO问题的firebase读取查询性能测试,我刚刚将其更改为我自己的firebase实例并删除了顺序测试,只留下了并行测试。

问题是,任何时候我运行此代码,我使for循环i < 12导致一个长度数组:32,768,我一直收到一个错误,说调用堆栈超出:RangeError: Maximum call stack size exceeded但我无法弄清楚是什么导致此错误...我尝试在localhost和云功能上测试它但没有成功。

(引用的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)的最大调用堆栈大小-admin / lib / database / database.js:190:120 at ta(/user_code/node_modules/firebase-admin/lib/database/database.js:45:40)at ua(/ user_code / node_modules / firebase-admin / lib / database / database.js:45:89)at Ag(/user_code/node_modules/firebase-admin/lib/database/database.js:190:93)/ user_code / node_modules / firebase-admin / lib / database / oc.(/user_code/node_modules/firebase-admin/lib/database/database/database/database.js上的Oc(/user_code/node_modules/firebase-admin/lib/database/database.js:85:363)上的database.js:195:260 :85:449)在Nc的Oc(/user_code/node_modules/firebase-admin/lib/database/database.js:85:449)(/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解决了。考虑批量加载更合理的物品。

通常虽然:尝试限制从数据库中加载数千个项目。如果您需要那么多项用于聚合操作,那么最好在数据库中显式保留聚合值并在每次写入操作时更新它。

发布评论

评论列表(0)

  1. 暂无评论