Я возвращаю транзакционное обещание, которое должно дождаться завершения транзакции до остановки функции. Транзакция выполняется отлично, но обещание, похоже, никогда не будет разрешено.
В консоли Firebase я вижу, что эта функция всегда истекает через 60 секунд.
const functions = require('firebase-functions');
const admin = require("firebase-admin");
const db = admin.database();
export let countFollowers = functions.database.ref('followers/{followee}/{follower}').onWrite(event => {
const followee = event.params.followee;
let path = `posts/${followee}/cnt_foll`;
const countRef = db.ref(path);
let out = countRef.transaction(current => {
if (event.data.exists() && !event.data.previous.exists()) {
return (parseInt(current) || 0) + 1;
} else if (!event.data.exists() && event.data.previous.exists()) {
return (parseInt(current) || 0) - 1;
}
});
return out;
});
EDIT:
Я решаю проблему со следующим "взломом", я сам создаю обещание, потому что все, что возвращается .transaction
, не работает:
return new Promise(function(resolve, reject) {
countRef.transaction(current => {
if (event.data.exists() && !event.data.previous.exists()) {
return (parseInt(current) || 0) + 1;
} else if (!event.data.exists() && event.data.previous.exists()) {
return (parseInt(current) || 0) - 1;
}
}, () => resolve(null));
});