2

Einfache Cloud-Funktion zum Abrufen von Datenbankdaten funktioniert nicht.Cloud-Funktionen für Firebase-Timeout

getusermessage() funktioniert nicht

Fehler:

Function execution took 60002 ms, finished with status: 'timeout'

Index.JS für Datenbank-Ergebnis.

const functions = require('firebase-functions'); 
const admin = require('firebase-admin'); 
admin.initializeApp(functions.config().firebase); 
const cors = require('cors')({origin: true}); 

// Take the text parameter passed to this HTTP endpoint and insert it into the 
// Realtime Database under the path /messages/:pushId/original 
exports.addMessage = functions.https.onRequest((req, res) => { 
    // Grab the text parameter. 
    const original = req.query.text; 
    // Push the new message into the Realtime Database using the Firebase Admin SDK. 
    admin.database().ref('/messages').push({original: original}).then(snapshot => { 
    // Redirect with 303 SEE OTHER to the URL of the pushed object in the Firebase console. 
    res.redirect(303, snapshot.ref); 
    }); 
}); 

// Listens for new messages added to /messages/:pushId/original and creates an 
// uppercase version of the message to /messages/:pushId/uppercase 
exports.makeUppercase = functions.database.ref('/messages/{pushId}/original') 
    .onWrite(event => { 
     // Grab the current value of what was written to the Realtime Database. 
     const original = event.data.val(); 
     console.log('Uppercasing', event.params.pushId, original); 
     const uppercase = original.toUpperCase(); 
     // You must return a Promise when performing asynchronous tasks inside a Functions such as 
     // writing to the Firebase Realtime Database. 
     // Setting an "uppercase" sibling in the Realtime Database returns a Promise. 
     return event.data.ref.parent.child('uppercase').set(uppercase); 
    }); 

var db = admin.database(); 
exports.getUserMessage = functions.https.onRequest((req, res) => { 
var query = db.ref("messages").orderByKey(); 
query.once("value") 
    .then(function(snapshot) { 
    snapshot.forEach(function(childSnapshot) { 
     var key = childSnapshot.key; 
     // childData will be the actual contents of the child 
     var childData = childSnapshot.val(); 
    }); 
}); 
}); 

Was mache ich falsch?

Antwort

5

Sie haben nicht gesagt, welche Ihrer drei Funktionen das Zeitlimit überschreitet, aber ich rate mal, welche. Ihre HTTPS-Funktion getUserMessage generiert keine Antwort an den Client. Cloud Functions wartet standardmäßig (60 Sekunden) darauf, dass eine Antwort generiert wird. Wenn dies nicht der Fall ist, wird die Funktion beendet und diese Nachricht im Protokoll belassen.

Jeder Codepfad in einer HTTPS-Funktion sollte eine Antwort auf den Client generieren.

+0

@Tough Sie raten, aber ich habe Ihre Antwort nicht bekommen, wie ich sagte, ich versuche Cloud-Funktion. Kannst du in 'getUserMessage()' darauf hinweisen, was ich falsch mache? –

+0

Wie gesagt, deine Funktion erzeugt keine Antwort auf den Client. Sie müssen unbedingt eine Antwort senden. Weitere Informationen finden Sie in der Dokumentation zu HTTPS-Funktionen, insbesondere im Abschnitt "HTTP-Funktionen beenden". https://firebase.google.com/docs/functions/http-events –

+0

@twister_void Sie vermissen eine return-Anweisung in der Funktion Doug erwähnt –

Verwandte Themen