only functions example deploy create node.js firebase firebase-database google-cloud-functions

node.js - example - firebase functions parameters



función de función de nube de firebase que se repite en ejecución (1)

Quiero hacer un resumen de los datos existentes, pero la función de nube de Firebase realiza el bucle para que la suma que hice no sea válida. ¿hay alguna solución a mi problema? gracias

esto en mi captura de pantalla

construcción de la base ,

Iniciar sesión

const functions = require(''firebase-functions''); const admin = require("firebase-admin"); admin.initializeApp(functions.config().firebase); var db = admin.database(); exports.makePurchaseSummaryAdd = functions.database.ref(''/invoice_data/{pushIdInvoice}/item/{pushIdItem}'') .onCreate(event => { var name = event.data.child(''itemName'').val(); var quantity = event.data.child(''quantity'').val(); var ref = db.ref(''/invoice_data/'' + event.params.pushIdInvoice + ''/idUser''); ref.on("value", function(snapshot) { var refUser = db.ref(''/user_data/'' + snapshot.val() + ''/purchaseSummary/'' + name.toUpperCase()); refUser.on("value", function(snapshotUser) { if (snapshotUser.exists()){ console.log(''Ada Data''); var count = snapshotUser.val(); var newCount = quantity + count; refUser.set(newCount); console.log(''create'', count, newCount, name.toUpperCase()); } else { console.log(''Tidak Ada Data''); } }, function (errorObject) { console.log("The read failed: " + errorObject.code); }); }, function (errorObject) { console.log("The read failed: " + errorObject.code); }); return true; });


Está adjuntando oyentes de referencia de base de datos utilizando el método on () . Esto deja al oyente unido:

Su devolución de llamada se activará para los datos iniciales y nuevamente cada vez que los datos cambien

En su lugar, debe usar una vez () :

Escucha exactamente un evento del tipo de evento especificado y luego deja de escuchar

Su código está en bucle porque adjunta un detector refUser.on(...) y luego está cambiando el valor en esa ubicación en la devolución de llamada: refUser.set(newCount);