为什么不执行onsubmit内部的功能?

时间:2020-03-28 23:32:14

标签: javascript firebase firebase-realtime-database

html:

<div class="container">
  <form action="#" onsubmit="ejecucion()" class="was-validated">
    <div class="form-group">
      <label for="sleep">Tiempo entre mediciones:</label>
      <input type="text" class="form-control" id="sleep" placeholder="Tiempo en minutos entre mediciones (por defecto es 2 minutos)" name="sleep" required>
      <div class="valid-feedback">OK!</div>
      <div class="invalid-feedback">Ingrese un valor! Unicamente numeros!</div>
    </div>
    <div class="form-group">
      <label for="points">Cantidad de puntos en grafico/s:</label>
      <input type="text" class="form-control" id="points" placeholder="Ingrese la cantidad de puntos que desea ver en los graficos (por defecto es 300 puntos)" name="points" required>
      <div class="valid-feedback">Valid.</div>
      <div class="invalid-feedback">Ingrese un valor! Unicamente numeros!</div>
    </div>
    <div class="form-group form-check">
      <label class="form-check-label">
        <input class="form-check-input" type="checkbox" name="remember" required> Verifique los valores introducidos
        <div class="valid-feedback">OK!</div>
        <div class="invalid-feedback"></div>
      </label>
    </div>
    <button type="submit" class="btn btn-primary">Configurar</button>
  </form>
</div>

javascript:

const config = {
    apiKey: "",
    authDomain: "",
    databaseURL: "",
    projectId: "",
    storageBucket: "",
    messagingSenderId: "",
};
firebase.initializeApp(config);


function ejecucion(){
    var sleep  = document.getElementById("sleep").value;
    var points = document.getElementById("points").value;

    firebase.database().ref('dispositivos/' + mac + "/config/control").set({
        delay: sleep,
        points: points
      });

    location.replace("home.html"); // Redirecciono al inicio
}

如果我放置了一个cosole.log,它将在提交表单时运行,但是firebase写入或重定向均无效。

我不放置数据库的配置,因为它不属于我,无论如何,在我的测试代码中,由于我成功读取了数据库,因此配置正确。 执行代码时,控制台上没有错误。

1 个答案:

答案 0 :(得分:0)

写入Firebase实时数据库是异步发生的。当前,在将写操作发送到数据库之前,您已离开页面。要等到写入完成,请使用then()块:

firebase.database().ref('dispositivos/' + mac + "/config/control").set({
  delay: sleep,
  points: points
}).then(function() {
  location.replace("home.html"); // Redirecciono al inicio
})