【发布时间】:2020-10-07 03:48:01
【问题描述】:
根据this question,我发送了一个简单的定义良好的 json 对象,并从我的简单云函数返回一个简单的定义良好的 json 对象。云端功能代码如下:
import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';
admin.initializeApp(); // (Apparently you don't need to pass any config values here?)
export const sendMessage = functions.https.onCall(async (data, context) => {
try {
return {
data,
context
};
} catch (error) {
throw new functions.https.HttpsError('aborted', error);
}
});
这是我的网络应用程序的调用代码:
const sendMessage_CF = firebase.functions().httpsCallable('sendMessage');
const sendMessage = async () => {
try {
const response = await sendMessage_CF({ body: 'test message' });
console.log(response);
} catch (error) {
console.error('Error', error);
}
};
生成的日志是:
Function execution took 1138 ms, finished with status code: 500
sendMessage
Unhandled error RangeError: Maximum call stack size exceeded at Object (<anonymous>) at
/workspace/node_modules/lodash/lodash.js:4919:24 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 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)
就是这么简单的一个函数,基本上就是hello world,所以....我真的说不上是什么问题。
baseForOwn 似乎是类似于 forEach 的对象键的 lodash 内部实现,但我不知道 Object (<anonymous>) 是什么。也许我应该console.log函数接收的参数。
编辑:所以我将这一行添加到云函数的顶部:
console.log('PARAMS', data, context);
发生的事情是 1 次调用添加了 50 个新日志。奇怪的是,他们都没有提到“PARAMS”或记录整个对象。似乎每一个都是来自data 或context 的一个属性,也许,就好像在每个键的每个键上都调用了一个console.log。剧情变厚了??
实际上,最后记录的位是这样的:
uid: 'J0xMj8OVn4Voc6yb547itgjt2iC3' } } }
就好像它用换行符打破了日志语句!我对此感到很困惑。更不用说我最初的“PARAMS”不包括在任何地方。对于它的价值,如果我 console.log 本身没有数据/上下文的字符串文字,它会正确记录,每次调用一次。
【问题讨论】:
标签: javascript firebase google-cloud-functions