【问题标题】:onCall cloud function returns 'Data cannot be encoded in JSON. NAN'onCall 云函数返回'数据不能用 JSON 编码。南'
【发布时间】:2020-08-31 03:36:58
【问题描述】:

我有一个看起来像这样的 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 将我请求的文档打印为对象,所以我不确定问题是什么?

【问题讨论】:

  • 除了错误之外,您希望此函数返回什么确切?什么是日志打印?请编辑问题以解释什么不符合您的预期。

标签: javascript node.js firebase google-cloud-firestore google-cloud-functions


【解决方案1】:

我了解到您在 Firebase 函数日志中遇到此错误。这意味着您在对象的某处返回NaN。根据this文章:

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

这可能取决于实现,但是这里的NaN 不能进行 JSON 编码。 (在 Wikipedia - 数据类型和语法 - 数字中找到了一些相关信息)。

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

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

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

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

【讨论】:

  • 谢谢,我按照你的步骤解决了。为详细的帖子干杯,非常感谢它
猜你喜欢
  • 1970-01-01
  • 2020-12-01
  • 2020-07-10
  • 2021-07-16
  • 1970-01-01
  • 1970-01-01
  • 2020-04-12
  • 2019-02-01
  • 2021-08-15
相关资源
最近更新 更多