Я пытаюсь написать облачную функцию Firebase, которая будет выполнять операцию транзакции с базой данных Firebase в реальном времени и возвращать обещания и некоторые данные, когда я вызываю ее непосредственно из моего веб-приложения.
В настоящее время мойФункция выглядит следующим образом:
exports.myFunction = functions.https.onCall((data, context) => {
//reference of a node from Firebase real-time database
var db = admin.database().ref('node');
return db.transaction(function(snap){
if(snap){
if(snap == 'value'){
snap = 'new value';
}
}
return snap;
},
function(error, committed, datasnapshot){
if (error) {
var userId = 'a user id';
return admin.auth().deleteUser(userId).then(function() {
return {msg: error.message};
});
}
else if (!committed) {
var userId = 'a user id';
return admin.auth().deleteUser(userId).then(function() {
return {msg: 'transaction aborted'};
});
}
else{
//transaction complete
var database = admin.database().ref('another node');
return db.once('value').then(function(snapshot){
if(snapshot.val() == 'new value'){
return database.set('some_data').then(function(datasnap){
return {msg: 'done'};
});
}
else{
return {msg: 'not done'};
}
}
}
});
}
Проблема в том, что эта функция выдает ошибку: «RangeError: Превышен максимальный размер стека вызовов».Кажется, что почему-то происходит бесконечный рекурсивный вызов функции, который вызывает эту ошибку.
Я пытался удалить return из return db.transaction () , но после этого, функция ничего не возвращает клиенту, откуда я вызываю эту функцию.
Почему эта функция ведет себя так?И что я должен изменить в своем коде, чтобы вернуть данные клиенту без ошибок?