Javascript firebase函数未处理的错误RangeError:超出最大调用堆栈大小

Javascript firebase函数未处理的错误RangeError:超出最大调用堆栈大小,javascript,firebase,firebase-realtime-database,google-cloud-functions,Javascript,Firebase,Firebase Realtime Database,Google Cloud Functions,我已经被这个错误困扰了一段时间,仍然无法找出错误的根源。我正在从客户端(javascript)调用firebase函数,但firebase函数端抛出了最大调用堆栈错误。这是我的密码 exports.signInCart = functions.https.onCall(async (data, context) => { console.log(data) const sessionID = data.sessionID console.log(&quo

我已经被这个错误困扰了一段时间,仍然无法找出错误的根源。我正在从客户端(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 
未处理的错误RangeError:超过最大调用堆栈大小
在对象()处
at/workspace/node_modules/lodash/lodash.js:1198:19
在baseKeys(/workspace/node_modules/lodash/lodash.js:3484:16)
在关键点(/workspace/node_modules/lodash/lodash.js:13333:60)
at/workspace/node_modules/lodash/lodash.js:4920:21
在baseForOwn(/workspace/node_modules/lodash/lodash.js:2990:24)
位于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()
})
此外,您还需要花一些时间来正确处理代码前面的承诺,否则它可能无法按预期的方式工作。您的代码应该只返回一个承诺,该承诺只有在所有其他异步工作完成后才能解析