javascript - 如何在函数中将数据发送到firebase数据库
问题描述
我正在尝试将数据发送到 Firebase。函数执行后数据保存到数据库中,在函数执行过程中如何覆盖?
import firebase from 'firebase';
var config = {
apiKey: "xxx",
authDomain: "xxx.firebaseapp.com",
databaseURL: "https://xxx.firebaseio.com",
projectId: "xxx",
storageBucket: "xxx.appspot.com",
messagingSenderId: "xxx"
};
firebase.initializeApp(config);
var db = firebase.database();
var sleep = require('sleep');
function run(TIME) {
db.ref('/test/').child('status').set('1');
sleep.sleep(TIME);
db.ref('/test/').child('status').set('2');
sleep.sleep(TIME);
db.ref('/test/').child('status').set('3');
sleep.sleep(TIME);
db.ref('/test/').child('status').set('4');
};
//========================================<<<< Now I see status in Firebase
run(5);
解决方案
该set()
方法是异步的,并返回一个在写入服务器完成时解析的承诺,如此处的文档中所述。
从您上面的评论中,我了解到您想要一个状态“工作 - 在开始功能之前和完成之后”。
所以你应该按照以下方式做一些事情:
var status = '';
var adaNameRef = firebase.database().ref('users/ada/name');
status = 'WORKING';
adaNameRef.set({ first: 'Ada', last: 'Lovelace' })
.then(function() {
status = 'DONE';
})
.catch(function(error) {
console.log('Synchronization failed');
});
如果要“一次将多个值写入数据库”,则应使用该update()
方法。见这里和这里。
与该方法类似set()
,该update()
方法是异步的,并返回一个在写入服务器完成时解析的 Promise,因此您将使用相同的逻辑来更新 status 的值
更新您的评论
1. 将状态“WORKING”发送到 FB 2.将 Relay 设置为 ON 3.等待 x 秒 4.将状态“DONE”发送到 FB 5.将 Relay 设置为 OFF
如果我理解正确,这应该有效(但未经测试):
var adaNameRef = firebase.database().ref('users/ada/name');
adaNameRef.set({ status: 'WORKING'})
.then(function() {
// Set Relay to ON ... don't know exactly how you "set the relay"
sleep.sleep(x);
return adaNameRef.set({ status: 'DONE'})
})
.then(function() {
// Set Relay to OFF
})
.catch(function(error) {
console.log(error);
});
推荐阅读
- google-apps-script - 通过 Apps 脚本获得 Google Drive 权限——是否可以阻止编辑器下载或打印工作表?
- spring-cloud-stream - Spring Cloud Stream RabbitMQ 在死信队列上留下消息
- python - 如何找到包含 URL 数据的变量的字节数
- swift - 我可以使用 Xcode 11 在 Mojave 上编译 swift 5.1 吗?
- flutter - 使用图像选择器“无法加载资产”
- random - 如何将随机数生成器存储在结构中?
- sql - 如何在参数之一中使用 CASE 表达式创建 SQL 命令?
- javascript - 如何强制不缓存特定的外部资源?
- python - 为什么我得到相同的预测、召回和 F1 分数?
- java - 如何初始化 Firebase 托管在 google app-engine 上的 spring-boot 应用程序