2017-06-30 2 views
0

Ein 'Tage'-Knoten mit mehr als einem Kind wird nicht entfernt. Wie kann ich dieses Problem beheben?Ungültige Rückgabeanweisung in JavaScript

Ich muss sicherstellen, dass mein Versprechen bis zum letzten then() auf der obersten Ebene sprudelt. Also brauche ich eine Rückgabe vor collectionRef.once. Aber diese Return-Anweisung verhindert nun, dass die collectionRef.once passiert. Ich stecke fest!

Hier ist mein Code

const functions = require('firebase-functions'); 
const admin = require('firebase-admin'); 
admin.initializeApp(functions.config().firebase); 
const defaultDatabase = admin.database(); 

exports.deleteOldItems = functions.database.ref('/path/to/items/{pushId}') 
.onWrite(event => { 
    var ref = event.data.ref.parent; // reference to the items 
    var now = Date.now(); 
    var cutoff = now - 2 * 60 * 60 * 1000; 
    var oldItemsQuery = ref.orderByChild('timestamp').endAt(cutoff); 
    return oldItemsQuery.once('value', function(snapshot) { 
    // create a map with all children that need to be removed 
    var updates = {}; 
    snapshot.forEach(function(child) { 
     updates[child.key] = null 
    }); 
    // execute all updates in one go and return the result to end the function 
    return ref.update(updates); 
    }).then(function() {; 

    const theRef = event.data.ref; 
    const collectionRef = theRef.parent.child('days'); 
    return collectionRef; // ILEGAL RETURN STATEMENT 
    collectionRef.once('value').then(messagesData => { 
     if(messagesData.numChildren() > 1) { 

    let updates = {}; 
updates['/days'] = null; 
return defaultDatabase.ref().update(updates); // 'days' doesn't get removed even if it has more than 1 child (as in the image)! 
     } 
    }) 
}); 

}); 

Datenstruktur: https://i.stack.imgur.com/gVn8S.jpg

+0

Können Sie bitte aufhören, Fragen zu duplizieren, bei einem Thema bleiben, keine Notwendigkeit, mit demselben zu spammen [Frage] (https://stackoverflow.com/questions/44743530/node-with-more-than-1-child-is (nicht entfernt) –

+0

@MihaiIorga Niemand antwortet. Ich werde die richtige Antwort akzeptieren. –

Antwort

0
exports.deleteOldItems = functions.database.ref('/path/to/items/{pushId}') 
    .onWrite(event => { 
    var ref = event.data.ref.parent // reference to the items 
    var now = Date.now() 
    var cutoff = now - 2 * 60 * 60 * 1000 
    var oldItemsQuery = ref.orderByChild('timestamp').endAt(cutoff) 
    return oldItemsQuery.once('value', function(snapshot) { 
     // create a map with all children that need to be removed 
     var updates = {} 
     snapshot.forEach(function(child) { 
     updates[child.key] = null 
     }) 
     // execute all updates in one go and return the result to end the function 
     return ref.update(updates) 
    }).then(function() { 
     // const theRef = event.data.ref 
     const collectionRef = defaultDatabase.ref().child('/days') 
     // return collectionRef // ILEGAL RETURN STATEMENT 
     collectionRef.once('value').then(messagesData => { 
       console.log(`Hello messageData : ${messagesData.numChildren()}`) 
       if(messagesData.numChildren() > 1) { 
        const updates = {} 
        updates['/days'] = null 
        return defaultDatabase.ref().update(updates); // 'days' doesn't get removed even if it has more than 1 child (as in the image)! 
       } 
     }) 
    }) 

Verwendung defaultDatabase.ref().child('/days') statt mit event.data.ref.parent

auch gehen Sie durch die Dokumentation und lernen, wie Versprechen arbeitet, wird es Ihnen helfen, Zukunft. Für jetzt werden diese Änderungen funktionieren. Getestet an meinem Ende.

Videos müssen Sie

What's the difference between event.data.ref and event.data.adminRef? - #AskFirebase Asynchronous Programming (I Promise!) with Cloud Functions for Firebase - Firecasts

sehen Sie ihre Firebase YouTube Channel abonnieren können, um neueste Updates zu erhalten und erfahren Sie mehr.

+0

Große Antwort. Akzeptiert! Aber, aber wie überprüfe ich, ob 'const collectionRef = defaultDatabase.ref(). Child ('/ days')' existiert? –

+0

Wenn es im Moment von '.onWrite' existiert, möchte ich 'Tage' entfernen. Wenn es nicht im Moment der '.onWrite' ist, möchte ich nicht 'Tage' entfernt werden. –

+0

Ich habe Ihre Frage nicht beantwortet, aber ich werde versuchen, sie zu beantworten. Sie können etwas nicht entfernen, das nicht existiert, so dass Sie sich nicht darum kümmern müssen, etwas zu entfernen, das nicht existiert. –

Verwandte Themen