моя работа заключается в том, что firebase подписывается на брокер mqtt и разбивает полученные брокером сообщения в БД в реальном времени
Нет задержки при получении сообщения mqtt, но если узел уже существует в БД и если он существует, то последнее значение ключа и операции записи данных занимают около 1-2 секунд каждая
вот мой код
function handleMsg(topic, payload) {
//send message to start
const msg_text = payload.toString()
test_promise(msg_text)
.then(function(snapshot){return test_promise2(snapshot);})
.then(function(snapshot){return test_promise3(snapshot);})
.then(function(msg){ console.log(log); log='';})
.catch(function(msg) { console.log(log); log='';});
}
function test_promise(msg_text){
return new Promise(function (resolve, reject){
msg_split = msg_text.split("::");
var db_ref = db.ref("backmountain_"+device_id+"_"+time);
db_ref.once('value',function(snapshot){
//strat -> end , 1.4 ~ 2 second
return resolve(msg_text+"::"+snapshot.exists());
}).catch(function(err){
return reject("test_promise reject : "+err);
});
});
}
function test_promise2(msg_text){
return new Promise(function (resolve, reject){
var db_ref = db.ref("backmountain_"+device_id+"_"+time);
if(chk_exists == "true"){
//key orderByKey > orderByChild > orderByValue
db_ref.orderByKey().limitToLast(1).once("child_added").then( function(lastkey){
//strat -> end , 1.4 ~ 2 second
return resolve(msg_text+"::"+s_id);
})
.catch(function(err){
return reject("test_promise2 limitToLast reject : "+err);
});
} else if(chk_exists=='false'){
return resolve(msg_text+"::"+"1");
}
});
}
function test_promise3(msg_text){
return new Promise(function (resolve, reject){
var db_ref = db.ref("backmountain_"+device_id+"_"+time);
db_ref.push().set({
data
}).catch(function(err){
return reject("test_promise3 set reject : "+err);
});
return resolve("test_promise3 OK : ");
});
}
Я развернул тестовую функцию, разложил каждую задачу БД и попробовал ее одну за другой, но это происходит потому, что произошла та же задержка, поэтому она не задерживается обещанием
Я в основном работал над примерами, поэтому, если у вас есть другие хорошие способы или вам нужна дополнительная настройка, пожалуйста, ответьте на них.
Структура БД здесь
введите описание изображения здесь