Ich habe den folgenden Fall, wenn ich Daten lösche, muss ich die App-Badges löschen (im Moment lösche ich sie mit Silent Push Notication und reduzieren die App-Badges-Nummer mit der Cloud-Funktion), wenn der Benutzer, der die Anfrage gesendet hat gelöscht. Aber da der Benutzer, der löschte, mehrere Anfragen an verschiedene Benutzer an verschiedenen Orten senden konnte, entschied ich, dass ich eine Funktion erstellen muss, die in fire base database trigger-Funktionen aufgerufen wird, und es wird auch helfen, den gleichen Code nicht überall zu duplizieren.Wie kann man eine Funktion erstellen, die in anderen Funktionen in Cloud Functions aufgerufen werden kann?
wird die Funktion so
function adminRemoveAppBadge(userID, dataID, categoryID) {
};
Und zum Beispiel nennt sie in dieser Funktion
module.exports = functions.database.ref('/cards/{cardID}/interestedUsers/{interestedUserID}').onWrite(event => {
const currentData = event.data.current;
const prevData = event.data.previous;
const cardID = event.params.cardID;
const interestedUserID = event.params.interestedUserID;
if (currentData.val() && !prevData.val()) {
// value created
return console.log('cardInterestedUserHandler - created');
} else if (!currentData.val() && prevData.val()) {
// value removed
console.log('cardInterestedUserHandler - removed', currentData.val());
const cardRef = admin.database().ref("cards").child(cardID);
const cardRefPromise = cardRef.once("value", function(snap, error) {
if (error) {
return error;
};
if (snap.val()) {
const cardJSON = snap.val();
const cardOwnerID = cardJSON["ownerID"];
if (cardOwnerID) {
const cardOwnerAppBadgesRef = admin.database().ref("userAppBadges").child(cardOwnerID).child("appBadgeModels").orderByChild("dataID").equalTo(cardID);
const cardOwnerAppBadgesRefPromise = cardOwnerAppBadgesRef.once("value", function (cardOwnerAppBadgesRefSnap, error) {
if (error) {
return error;
};
if (cardOwnerAppBadgesRefSnap.val()) {
var deletingPromises = [];
cardOwnerAppBadgesRefSnap.forEach(function(cardOwnerAppBadgesRefSnapChild) {
const appBadgeModelJSON = cardOwnerAppBadgesRefSnapChild.val();
const appBadgeModelID = appBadgeModelJSON["id"];
const senderID = appBadgeModelJSON["senderID"];
if (appBadgeModelID && senderID) {
if (senderID == interestedUserID) {
const cardOwnerAppBadgeRef = admin.database().ref("userAppBadges").child(cardOwnerID).child("appBadgeModels").child(cardOwnerAppBadgeModelID);
const cardOwnerAppBadgeRefPromise = cardOwnerAppBadgeRef.remove();
deletingPromises.push(cardOwnerAppBadgeRefPromise);
// to call
adminRemoveAppBadge
};
} else {
console.log("cardOwnerAppBadgeModelID == null");
};
});
return Promise.all(deletingPromises);
};
});
return Promise.all([cardOwnerAppBadgesRefPromise]);
} else {
return console.log("owner id == null");
};
};
});
return Promise.all([cardRefPromise]);
} else {
return console.log('cardInterestedUserHandler - updated');
};
});
Auch Funktionen sind in verschiedenen Dateien annähernd. Wie kann ich es in anderen Firebase-Cloud-Funktionen aufrufen und wie stelle ich diese Funktion bereit?
aktualisieren Ich habe versucht, so eine der Optionen zu tun, wie here und here geschrieben, aber als ich versuchte, bekam ich einen Fehler zu tun bereitstellen kann nicht Modul ‚AppBadges/adminRemoveAppBadge.js‘ finden.
const functions = require('firebase-functions');
const admin = require('firebase-admin');
exports.adminRemoveAppBadge = function (userID, dataID, categoryID) {
console.log("adminRemoveAppBadge nil");
};
diese Funktion Gewünscht so
var adminRemoveAppBadgeModule = require("AppBadges/adminRemoveAppBadge.js");
und diese Funktionen aufrufen, so
adminRemoveAppBadgeModule.adminRemoveAppBadge(cardOwnerID, cardID, 0);
Bitte zeigen Sie wha t Ihre SendMail sieht aus wie – Alexander
@Alexsander - Bearbeitete die Antwort mit dem entsprechenden Code aus meiner SendMail.js-Datei. – JoeManFoo
Vielen Dank! – Alexander