如何在函数中向firebase数据库发送数据
我正在尝试将数据发送到firebase。执行该功能后,数据将保存到数据库中,如何在函数执行期间覆盖它?
import firebase from 'firebase';
var config = {
apiKey: "xxx",
authDomain: "xxx.firebaseapp",
databaseURL: "",
projectId: "xxx",
storageBucket: "xxx.appspot",
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()
方法是异步的,并返回一个在写入服务器完成时解析的promise,如doc here中所述。
从你上面的评论我明白你想要一个状态“工作 - 在开始功能之前和之后完成”。
所以你应该按照以下几点做一些事情:
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()
方法。见here和here。
与set()
方法类似,update()
方法是异步的,并返回一个在写入服务器完成时解析的promise,因此您将使用相同的逻辑来更新status的值
更新您的评论
1.将状态'WORKING'发送到FB 2.将继电器设置为ON 3.等待x秒4.将状态'DONE'发送到FB 5.将继电器设置为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);
});
如何在函数中向firebase数据库发送数据
我正在尝试将数据发送到firebase。执行该功能后,数据将保存到数据库中,如何在函数执行期间覆盖它?
import firebase from 'firebase';
var config = {
apiKey: "xxx",
authDomain: "xxx.firebaseapp",
databaseURL: "",
projectId: "xxx",
storageBucket: "xxx.appspot",
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()
方法是异步的,并返回一个在写入服务器完成时解析的promise,如doc here中所述。
从你上面的评论我明白你想要一个状态“工作 - 在开始功能之前和之后完成”。
所以你应该按照以下几点做一些事情:
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()
方法。见here和here。
与set()
方法类似,update()
方法是异步的,并返回一个在写入服务器完成时解析的promise,因此您将使用相同的逻辑来更新status的值
更新您的评论
1.将状态'WORKING'发送到FB 2.将继电器设置为ON 3.等待x秒4.将状态'DONE'发送到FB 5.将继电器设置为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);
});