这是我部署的唯一功能:
exports.gameAction = functions.https.onCall((data, context) => {
const timeoutRef = admin.database().ref('/current_player/timeout');
return timeoutRef.transaction((timeout) => {
return;
});
});
如果我理解正确,事务将在调用后立即中止,但是当我从应用程序中调用此函数时,控制台将显示以下错误:
Unhandled error RangeError: Maximum call stack size exceeded
at Object (native)
at baseGetTag (/user_code/node_modules/firebase-functions/node_modules/lodash/lodash.js:3087:51)
at Function.isBoolean (/user_code/node_modules/firebase-functions/node_modules/lodash/lodash.js:11383:33)
at encode (/user_code/node_modules/firebase-functions/lib/providers/https.js:229:11)
at /user_code/node_modules/firebase-functions/node_modules/lodash/lodash.js:13400:38
at /user_code/node_modules/firebase-functions/node_modules/lodash/lodash.js:4925:15
at baseForOwn (/user_code/node_modules/firebase-functions/node_modules/lodash/lodash.js:3010:24)
at Function.mapValues (/user_code/node_modules/firebase-functions/node_modules/lodash/lodash.js:13399:7)
at encode (/user_code/node_modules/firebase-functions/lib/providers/https.js:242:18)
at /user_code/node_modules/firebase-functions/node_modules/lodash/lodash.js:13400:38
我在这里想念什么?
答案 0 :(得分:0)
onCall函数将数据发送回客户端的方式是返回一个与要发送的对象数据一起解析的承诺。因此,Cloud Functions尝试对事务返回的承诺中包含的数据进行序列化,然后将其以JSON格式发送给客户端。
从transaction()的API文档中可以看到,promise包含一个Reference对象,该对象包含有关引用的各种元数据。它可能包含圆形数据结构,并且Cloud Functions试图序列化无限循环而挂断电话。
尝试从函数中返回不太复杂的内容。