Firebase Cloud Functions:中有myFunction
const myFunctionHandler = (params, context) => {
return new Promise((resolve, reject) => {
return admin
.database()
.ref("checks")
.push(params)
.then((r) => resolve(r))
.catch((e) => reject(e));
};
exports.myFunction = functions.https.onCall(myFunctionHandler);
这就是我在客户端的称呼:
functions()
.httpsCallable('myFunction')({
myParam: true,
})
.then(resp => console.log(resp))
.catch(e => console.log(e));
在Firebase Cloud函数中,以下是日志:
Function execution started
Unhandled error RangeError: Maximum call stack size exceeded
at Function.mapValues (/workspace/node_modules/lodash/lodash.js:13426:7)
at encode (/workspace/node_modules/firebase-functions/lib/providers/https.js:183:18)
at encode (/workspace/node_modules/firebase-functions/lib/providers/https.js:157:16)
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 baseForOwn (/workspace/node_modules/lodash/lodash.js:2990:24)
at Function.mapValues (/workspace/node_modules/lodash/lodash.js:13426:7)
Function execution took 2438 ms, finished with status code: 500
2438ms后,数据在Firebase实时数据库中正确输入,但响应为[Error: INTERNAL]
。为什么?
[EDIT]
我试图在客户端复制相同的数据库推送功能,如下所示:
database()
.ref()
.child(`checks`)
.push(params)
.then(r => resolve(r))
.catch(e => reject(e));
我的回答是:CCD_ 2,这是一个积极的反馈,告诉我信息存储正确。
我从云功能中得到了同样的积极响应但我拥有的是[Error: INTERNAL]
。
接收(来自Firebase Cloud函数中的函数(错误作为响应我的想法是信息没有正确存储。
可调用函数向客户端发送JSON负载。这就是他们能发送的全部内容。当您从可调用函数返回promise时,它将尝试序列化从promise解析的对象。您试图发送的对象(push((的结果是ThennableReference(过于复杂,无法序列化,因此它失败了。它包含自引用链接,这会导致您看到的错误。
您的问题仍然没有准确地指示JSON负载应该是什么。您必须弄清楚它是什么,并只将该对象发送到客户端。它显然不可能是ThennableReference。如果您需要将其转换为某种东西,请找出如何转换它,然后发送该对象。
相同的函数从以太客户端或服务器提供不同的响应。在FCF中,我只是避开它来解析推送的响应。在客户端中,它会返回谷歌文档中描述的https链接。
还要确保localhost:5001节点服务器没有运行。在我的情况下干扰了。