onCall 云函数返回'Data cannot be encoded in JSON. NAN'



我有一个onCall函数,如下所示。。

exports.getResults = functions.https.onCall((data, context) => {
const admin = context.auth.token.admin
const uniqueId = context.auth.uid
const doc = db.collection('collection').doc(data.docId)
return doc
.get()
.then(querySnapshot => {
return querySnapshot.docs.map(doc => {
const doc = doc.data()
const collectionDoc = {
docValues
}

return collectionDoc
})
})

我的console.log将我请求的文档打印为对象,所以我不确定问题出在哪里?

我知道您在Firebase函数日志中有这个错误。这意味着您将返回对象中某个位置的NaN。根据这篇文章:

若要将数据发送回客户端,请返回可以进行JSON编码的数据。

它可能取决于实现,但是这里NaN不能是JSON编码的。(在维基百科上找到了一些关于它的信息——数据类型和语法——数字(。

您可以通过部署具有未初始化变量的函数来轻松复制此问题:

exports.getResults = functions.https.onCall(() => {
var number;
var value = number+1;
return {
value,
"text": "test",
};
})

在我将undefined添加到数字的示例中,结果将是NaN。当然,可能还有其他函数也会返回NaN。无论如何,如果您部署上面的示例,它将记录相同的错误";数据不能用JSON编码。NaN";。我认为这在代码中最容易被忽略。

我认为你必须仔细检查你返回的所有数据。

最新更新