提问者:小点点

节点JS:循环通过allData时无法从Firebase实时数据库中删除数据


我试图通过forEach循环从Firebase中删除特定的数据,但是只删除了第一项。 其余的都跳过了。 我搞不懂这个。 感谢任何帮助。

下面是我正在使用的整个文件,在这里拆分为几个部分:

var admin = require("firebase-admin");
var moment = require('moment');    
var serviceAccount = require("path-to-json.json");    
admin.initializeApp({
    credential: admin.credential.cert(serviceAccount),
    databaseURL: "app.firebaseio.com"
});    
var db = admin.database();

通过首先获取所有数据来移除数据的函数调用

function removeOldData() {
    var ref = db.ref('/App/Items/');   
    var itemValue;

    ref.on("value",
        function (snapshot) {
            snapshot.forEach(element => {
                itemValue = element.val();
                if(itemValue.date === 'Invalid date' || itemValue.date === '') {
                    deleteData(element.key);
                }else {
                    date = moment(itemValue.date, "MMMM DD, YYYY").format()
                    if(moment().diff(date, 'days') > 14){
                        deleteData(element.key);
                    }
                }           
            });
        },
        function (errorObject) {
            console.log("The read failed: " + errorObject.code);
        }
   );
}

删除项目功能

function deleteData(key) {
    console.log("Deleting ... " + key);

    var ref = db.ref('/App/Items/' + key + '/');
    ref.remove();
}

出口

module.exports = { removeOldData };

共1个答案

匿名用户

经过更多的尝试和研究,使用ref.once为我修复了这个问题。