Облачная функция Firebase - необработанная ошибка RangeError - PullRequest
0 голосов
/ 07 сентября 2018

Это единственная функция, которую я развернул:

exports.gameAction = functions.https.onCall((data, context) => { 
    const timeoutRef = admin.database().ref('/current_player/timeout');
    return timeoutRef.transaction((timeout) => {
        return;
    });
});

Если я правильно понимаю, транзакция будет прервана сразу после вызова, но когда я вызываю эту функцию из моего приложения, консоль показывает ошибкуниже:

Unhandled error RangeError: Maximum call stack size exceeded
    at Object (native)
    at baseGetTag (/user_code/node_modules/firebase-functions/node_modules/lodash/lodash.js:3087:51)
    at Function.isBoolean (/user_code/node_modules/firebase-functions/node_modules/lodash/lodash.js:11383:33)
    at encode (/user_code/node_modules/firebase-functions/lib/providers/https.js:229:11)
    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:242:18)
    at /user_code/node_modules/firebase-functions/node_modules/lodash/lodash.js:13400:38

Что мне здесь не хватает?

1 Ответ

0 голосов
/ 07 сентября 2018

Функции onCall отправляют данные обратно клиенту, возвращая обещание, которое разрешается с данными объекта для отправки. Поэтому Cloud Functions пытается сериализовать данные, содержащиеся в обещании, возвращенном транзакцией, а затем отправить их в формате JSON клиенту.

Как видно из документации API для транзакции () , обещание содержит объект Reference, который содержит все виды метаданных о ссылке. Вероятно, он содержит циклическую структуру данных, и облачные функции зависают при попытке сериализации бесконечного цикла.

Попробуйте вместо этого вернуть что-то менее сложное из вашей функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...