我的工作是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 : ");
});
}
我已经部署了一个测试功能,分解了每个数据库任务,并一次又一次地尝试了它,但是之所以发生是因为发生了相同的延迟,所以它不会因诺言而延迟
我主要处理示例,因此,如果您有其他好的方法或需要其他配置,请回答它们。
数据库结构在这里
答案 0 :(得分:0)
Documentation说以下。为什么不将其另存为新文件,因为这已经对您有用?您可以使用Cloud Function for Firebase定期存档/删除旧邮件。
例如,社交博客应用可能会创建一条帖子, 同时将其更新为最近的活动提要和发布 使用以下代码的用户活动供稿:
function writeNewPost(uid, username, picture, title, body) { // A post entry. var postData = { author: username, uid: uid, body: body, title: title, starCount: 0, authorPic: picture }; // Get a key for a new Post. var newPostKey = firebase.database().ref().child('posts').push().key; // Write the new post's data simultaneously in the posts list and the user's post list. var updates = {}; updates['/posts/' + newPostKey] = postData; updates['/user-posts/' + uid + '/' + newPostKey] = postData; return firebase.database().ref().update(updates); }