У меня есть чат с Firebase
, и мне нужно удалить все сообщения, созданные более 12 часов, для этого у меня есть этот код
let date = new Date();
let timestamp = new Date(date.toLocaleString("en-US", { timeZone: "America/New_York" }));
timestamp = Math.floor((timestamp.getTime() - (1 * 12 * 60 * 60 * 1000)) / 1000);
chatRef.on('value', snapshot => {
let data = snapshot.val();
if(OBJECT_EXIST(data))
{
Object.keys(data).forEach(key => {
if(OBJECT_EXIST(data[key]))
{
if(snapshot.hasChild(key))
{
let child = key;
let count = 0
chatRef.child(key).on('value', snapshot => {
let data_ = snapshot.val();
if(data_ != key)
{
let last = Object.keys(data_).length - 1;
Object.keys(data_).forEach((key, index) => {
if(index < last)
{
if(OBJECT_EXIST(data_[key].created_at))
{
if(timestamp > data_[key].created_at)
{
chatRef.child(child).child(key).remove();
count++;
}
}
}
});
}
});
console.log('Room '+child+': '+count+' messages remove');
}
}
});
}
});
Этот код не работает вообще потому что, когда нужно удалить много сообщений, требуется слишком много времени, чтобы завершить sh выполнение, а console.log()
, который у меня есть ниже, чтобы узнать, сколько сообщений было удалено, появляется много раз, и счетчик достигает уровней до 3 или В 4 раза выше, чем вы должны мне дать.
Я что-то не так делаю? У меня есть этот код в функции в задании cron, которое выполняется каждый час, и он не удаляет все сообщения, если удаляется около 200 сообщений, удаляется только около 15, и если я выполняю функцию локально, если вы удаляете их все, но тогда это занимает слишком много времени и все console.log()
выходят, когда их не должно быть так много .
Структура, которую я использую в базе данных, такова:
- Chat
- Room
- Messages
Где может быть неограниченное количество комнат
Что я делаю? Неверно, или как я могу улучшить свою функцию, чтобы она не занимала так много времени, если нужно удалить много сообщений?