Fonctions de nuages ​​pour time-run FireWare

Je retourne la promesse de transaction qui devrait attendre la fin de la transaction avant d'arrêter la fonction. La transaction s'effectue bien, mais la promesse semble ne jamais se résoudre.

Je vois dans la console Firebase que cette fonction s'éteint toujours après les années 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; }); 

MODIFIER:

Je résolvent le problème avec le «piratage» suivant, je crée moi-même une promesse, car tout .transaction est en .transaction revenir ne fonctionne pas:

 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)); }); 

Il y avait un problème connu avec les anciennes versions du SDK de firebase-admin, où les références et les instantanés de la base de données Firebase ne pouvaient pas être sérialisés sur JSON et ne pouvaient donc pas être utilisés dans les valeurs de retour pour les fonctions Cloud. Cela inclut les valeurs de retour de transaction car elles ont également des instantanés.

Votre hack fonctionne autour du bug; Vous devriez également obtenir le correctif si vous mettez à jour votre version de firebase-admin.