Я сделал функцию, которая переключает логическое значение в базе данных посредством транзакции.Взгляните:
export const toggleDoneState = functions.https.onCall((data, context) => {
const userId = getUserIdFromCallableContext(context)
let togglePath: admin.database.Reference
if (!isUndefined(data.subtaskId)) {
const subtaskId = data.subtaskId
if (isValidString(subtaskId)) {
togglePath = admin.database().ref("userSubtasks").child(userId).child(subtaskId).child("done")
} else {
throw new functions.https.HttpsError('invalid-argument', 'Expected valid Subtask Id')
}
} else {
throw new functions.https.HttpsError('invalid-argument', 'Expected valid toggle type')
}
return togglePath.transaction(currentValue => {
return !(currentValue || false)
}).then(value => {
return { done: value }
})
})
Это единственная развернутая мной функция! Раньше у меня работало около 15 функций, но я удалил их, чтобы сделать этот тест чище.
Когда я вызываю функцию из приложения для iOS, я вижу, что значение в базе данных переключается, как и ожидалось, но я получаю сообщение об ошибке из SDK функций в iOS:
Domain=com.firebase.functions Code=13 "INTERNAL" UserInfo={NSLocalizedDescription=INTERNAL}
Когда я просматриваю журналы функций в консоли, я вижу следующую ошибку:
Необработанная ошибка RangeError: Превышен максимальный размер стека вызовов
at Function.mapValues (/user_code/node_modules/firebase-functions/node_modules/lodash/lodash.js:13395:23)
at encode (/user_code/node_modules/firebase-functions/lib/providers/https.js:204:18)
at /user_code/node_modules/firebase-functions/node_modules/lodash/lodash.js:13400:38
at /user_code/node_modules/firebase-functions/node_modules/lodash/lodash.js:4925:15
at baseForOwn (/user_code/node_modules/firebase-functions/node_modules/lodash/lodash.js:3010:24)
at Function.mapValues (/user_code/node_modules/firebase-functions/node_modules/lodash/lodash.js:13399:7)
at encode (/user_code/node_modules/firebase-functions/lib/providers/https.js:204:18)
at /user_code/node_modules/firebase-functions/node_modules/lodash/lodash.js:13400:38
at /user_code/node_modules/firebase-functions/node_modules/lodash/lodash.js:4925:15
at baseForOwn (/user_code/node_modules/firebase-functions/node_modules/lodash/lodash.js:3010:24)
at Function.mapValues (/user_code/node_modules/firebase-functions/node_modules/lodash/lodash.js:13399:7)
Значение в базе данных переключается, как и ожидалось, но я хотел бы не получить и ошибку и понять, почему.Любые подсказки?