Облачная функция OnCall возвращает ‘Данные не могут быть закодированы в JSON. NAN’

#javascript #node.js #firebase #google-cloud-firestore #google-cloud-functions

#javascript #node.js #firebase #google-облако-firestore #google-cloud-функции

Вопрос:

У меня есть функция 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 печатает документ, который я запрашиваю, как объект, поэтому я не уверен, в чем проблема?

Комментарии:

1. Что именно вы ожидаете, что эта функция вернет, кроме ошибки? Что такое печать журнала? Пожалуйста, отредактируйте вопрос, чтобы объяснить, что работает не так, как вы ожидаете.

Ответ №1:

Я понимаю, что у вас есть эта ошибка в журналах функций Firebase. Это означает, что вы возвращаетесь NaN куда-то в объект. Согласно этой статье:

Чтобы отправить данные обратно клиенту, верните данные, которые могут быть закодированы в формате JSON.

Это может зависеть от реализации, однако здесь NaN не может быть закодировано в формате JSON. (Нашел кое-что об этом в Википедии — Типы данных и синтаксис — Число).

Вы можете легко воспроизвести эту проблему, развернув функцию с неинициализированной переменной:

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

В примере, который я добавил undefined в number, результат будет NaN . Конечно, могут быть и другие функции, которые также будут возвращать NaN . В любом случае, если вы развернете приведенный выше пример, он зарегистрирует ту же ошибку «Данные не могут быть закодированы в JSON. NaN». Я думаю, что это легче всего упустить из виду в коде.

Я думаю, вам нужно тщательно проверять все данные, которые вы возвращаете.

Комментарии:

1. Спасибо, я решил это, следуя вашим шагам. Приветствую подробный пост, действительно ценю это