2017-09-19 3 views
0

Wir haben eine Firebase-Funktion, die Elemente nach 24 Stunden entfernt. Die Funktion funktioniert, aber die Webseite, die mit der Funktion verknüpft ist, läuft weiter, also denke ich, dass die Funktion in einer Endlosschleife ist. Gibt es eine Möglichkeit, dieses Problem zu beheben?Cloud-Funktion läuft weiter

Dies ist unsere Funktion:

exports.delete = functions.https.onRequest((req, res) => { 
const currentTime = new Date().getTime(); 
const dayAgo = currentTime - 86400000; 

ref.child('testlijst') 
    .orderByChild('tijd') 
    .endAt(dayAgo) 
    .once('value') 
    .then(snap => { 
     snap.forEach(c => { 
      c.ref.remove(); 
     }) 
    }); 
}); 

Antwort

1

Sie sind verpflichtet, eine Antwort an den Client zu senden, um eine HTTPS-Typ-Funktion ohne Timeout zu beenden. Sie sollten dies erst tun, nachdem die Arbeit in der Funktion abgeschlossen ist. Das bedeutet, dass Sie lernen müssen, wie Sie Versprechungen verwenden.

Sie müssen alle Versprechen von c.ref.remove() und warten wieder sammeln für alle von ihnen abgeschlossen ist, bevor die Funktion mit einer Antwort an den Client beendet:

ref.child('testlijst') 
    .orderByChild('tijd') 
    .endAt(dayAgo) 
    .once('value') 
    .then(snap => { 
     const promises = []; 
     snap.forEach(c => { 
      const p = c.ref.remove(); 
      promises.push(p); 
     }) 
     Promise.all(promises).then(result => { 
      res.send("done"); 
     }); 
    }); 
});