【问题标题】:how to send data to firebase database in function如何在函数中将数据发送到firebase数据库
【发布时间】:2019-02-12 21:14:39
【问题描述】:

我正在尝试将数据发送到 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);

【问题讨论】:

  • 您能否更详细地解释您要达到的目标?谢谢
  • 我想在 firebase 中获得状态。 WORKING - 在开始功能之前和之后完成。

标签: javascript node.js firebase npm firebase-realtime-database


【解决方案1】:

set() 方法是异步的,并返回一个在写入服务器完成时解析的承诺,如文档 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() 方法。请参阅herehere

set() 方法类似,update() 方法是异步的,并返回一个在写入服务器完成时解析的承诺,因此您可以使用相同的逻辑来更新 status 的值


根据您的评论更新

1.将状态“工作”发送到 FB 2.将继电器设置为开启 3.等待 x 秒 4.将状态“完成”发送到 FB 5.将继电器设置为关闭

如果我理解正确,这应该可以工作(但未经测试):

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);
  });

【讨论】:

  • Renaud,谢谢你的帮助,我想将状态发送到 firebase。
  • @Tom 不是 100% 确定你想做什么,但是通过混合睡眠和异步方法触发 // 你可能会得到奇怪的结果。如果您真正详细地解释您想要做什么,我们可能会提供进一步的帮助。
  • 我想要: 1. 将状态“WORKING”发送到 FB 2. 将 Relay 设置为 ON 3. 等待 x 秒 4. 将状态“DONE”发送到 FB 5. 将 Relay 设置为 OFF 谢谢@Renaud
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-06
  • 1970-01-01
  • 2020-10-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多