![](/img/trans.png)
[英]Firebase : Unhandled error RangeError: Maximum call stack size exceeded
[英]firebase function Unhandled error RangeError: Maximum call stack size exceeded
我已經被這個錯誤困住了一段時間,但仍然無法弄清楚來源。 我正在從客戶端(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()
})
此外,您需要花一些時間在代碼的早期正確處理承諾,否則它可能無法按您期望的方式工作。 您的代碼應該只返回一個只有在所有其他異步工作完成后才能解決的承諾。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.