0

Ich versuche, einen täglichen Trigger zu verwenden, um Informationen in meiner Firebase-Datenbank zu ändern. Ich habe eine Reihe von anderen Cloud-Funktionen, die ordnungsgemäß funktionieren, aber ich kann nicht scheinen, diese Funktion zu erhalten, um die Datenbank zu ändern.Schreiben an Firebase-Datenbank von Cloud-Funktion ausgelöst durch PubSub

const admin = require('firebase-admin'); 
exports.daily_job = functions.pubsub.topic('daily-tick').onPublish((event) => { 
    console.log("This job is run every day!"); 
    const databaseRef = admin.database().ref('/accountActions/dailyDeletion'); 
    databaseRef.child('delete').set("Data has been deleted!"); 
    return "End of database clearing"; 
}); 

Dies ist der Code, den ich getestet habe, um zu sehen, ob der Trigger funktioniert. In meiner Konsole wird angezeigt, dass die Funktion gestartet wird, die Konsolenanweisung protokolliert wird und die Ausführung in 40-90ms endet. Aber meine Datenbank wird nie geändert. Die Löschanweisung wird niemals angezeigt.

Jede Hilfe wird sehr geschätzt!

+0

Es scheint, dass ich die App richtig initialisiert habe. Ich habe versucht, meinen Code so zu ändern, wie Sie es vorgeschlagen haben, und die Funktion läuft jetzt ab. Irgendeine Idee, was könnte passieren? –

Antwort

0

Ich fand die Antwort auf das Problem. Ich hatte die App gemäß der Firebase-Dokumentation auf Push-Benachrichtigungen initialisiert:

admin.initializeApp({ 


    credential: admin.credential.cert({ 
    projectId: {projectId}, 
    clientEmail: {email}, 
    privateKey: {private key} 
    }), 
databaseURL: {databaseURL} 
}); 

Aber aus irgendeinem Grund verursachte dies Probleme. Ich schaltete es mit einem einfachen

admin.initializeApp(functions.config().firebase); 

Dies scheint das Problem behoben haben, und Push-Benachrichtigungen funktionieren noch.

0

The documentation erklärt, dass eine Funktion, die ein JavaScript Promise muss zurückkehren asynchrone Verarbeitung durchführt:

Resolve Funktionen, die durch die Rückgabe von JavaScript versprechen diese

Ändern Sie Ihren Code asynchrone Verarbeitung durchführen:

exports.daily_job = functions.pubsub.topic('daily-tick').onPublish((event) => { 
    console.log("This job is run every day!"); 
    const databaseRef = admin.database().ref('/accountActions/dailyDeletion'); 
    return databaseRef.child('delete').set("Data has been deleted!").then(() => { 
    console.log('End of database clearing'); 
    }).catch(error => { 
    console.error('Database clearing failed: ', error); 
    }); 
}); 
+0

Seltsamerweise bekomme ich immer noch eine Zeitüberschreitung –

+0

@RossHarding: Zeigt die Cloud-Funktion Log-Ausgabe "Ende der Datenbank Clearing" anzeigen? –

+0

Nein, es zeigt nicht –

0

Fügen Sie diesen Befehl irgendwo vor ex ein ports.daily_job ..

admin.initializeApp(functions.config().firebase); 
Verwandte Themen