如何在功能

时间:2018-09-07 13:44:23

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

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

1 个答案:

答案 0 :(得分: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()方法是异步的,它返回一个承诺,该承诺将在完成对服务器的写入后解决,因此您将使用相同的逻辑来更新状态值


评论后更新

1。将状态“工作”发送到FB 2.将继电器设置为打开3.等待x秒4.将状态“完成”发送到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);
  });