#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. Спасибо, я решил это, следуя вашим шагам. Приветствую подробный пост, действительно ценю это