javascript - firebase函数未处理的错误RangeError:超过最大调用堆栈大小
问题描述
我已经被这个错误困住了一段时间,仍然无法弄清楚来源。我正在从客户端(javascript)调用 firebase 函数,但 firebase 函数端抛出最大调用堆栈错误。这是我的代码
exports.signInCart = functions.https.onCall(async (data, context) => {
console.log(data)
const sessionID = data.sessionID
console.log("session id ", sessionID)
const shopIntentRef = admin.database().ref('/shopIntent/'+ sessionID)
try{
shopIntentRef.once("value", (snapshot)=> {
if(!snapshot.val()){
console.log("not recognized ")
return "NA"
}
if(snapshot.val()){
admin.database().ref('/shopintent/'+ sessionID+'/').update(data);
return (snapshot.val());
}
});
}catch(ex){
console.log('ex /updateCoords = '+ex);
}
return shopIntentRef.once("value")
})
我尝试了几种不同的方法;我认为我应该能够在没有最后一个 return 语句的情况下获得一些值,并且我确实得到了返回状态代码 200,但没有返回 snapshot.val()。当我添加最后一个 return 语句时,它开始在 firebase 函数控制台中生成此错误
Unhandled error RangeError: Maximum call stack size exceeded
at Object (<anonymous>)
at /workspace/node_modules/lodash/lodash.js:1198:19
at baseKeys (/workspace/node_modules/lodash/lodash.js:3484:16)
at keys (/workspace/node_modules/lodash/lodash.js:13333:60)
at /workspace/node_modules/lodash/lodash.js:4920:21
at baseForOwn (/workspace/node_modules/lodash/lodash.js:2990:24)
at Function.mapValues (/workspace/node_modules/lodash/lodash.js:13426:7)
at encode (/workspace/node_modules/firebase-functions/lib/providers/https.js:184:18)
at /workspace/node_modules/lodash/lodash.js:13427:38
at /workspace/node_modules/lodash/lodash.js:4925:15
下午 5:41:07.909
如何解决上述错误?
解决方案
您正在尝试将 DataSnapshot 对象返回给调用者。不幸的是,该对象中有循环引用,不能简单地序列化。您将需要从中获取一个普通的 JavaScript 对象并返回它。
return shopIntentRef.once("value").then(snapshot => {
return snapshot.val()
})
此外,您需要花一些时间在代码的早期正确处理 Promise,否则它可能无法按您期望的方式工作。您的代码应该只返回一个仅在所有其他异步工作完成后才解析的承诺。
推荐阅读
- javascript - 你能在 gif 中隐藏 RCE 吗?
- python - 同时从多个文件夹获取信息
- python - requests.post 返回 404 错误页面的响应 - 数据参数/表单数据问题?
- angular - 从不同的父路由路由到子路由时的行为
- cross-browser - 在 Service Worker 的事件处理程序中去抖动异步工作
- apache-spark - 使用 apache spark 失败后继续写入大型数据集
- python-3.x - Raymarcher 很慢
- javascript - 如何在没有 webpack 构建配置的情况下将 React 组件提取到库中?
- c# - (UNITY / C#) 没有从派生的泛型类调用被覆盖的函数
- c++ - 孩子如何通过成员方法访问另一个孩子的受保护成员