【问题标题】:how to retrieve firebase data on first click using javascript如何使用javascript在第一次点击时检索firebase数据
【发布时间】:2020-10-01 04:13:16
【问题描述】:

当我点击登录按钮后代码执行时,

function login(){
    var email=document.getElementById("email").value;
    var password=document.getElementById("Password").value;
    var Real_email="";
    var Real_password="";
        firebase.database().ref('/login').on('value',function(snapshot){
        snapshot.forEach(function (childsnapshot){
            Real_email=childsnapshot.val().email;
            Real_password=childsnapshot.val().password;
            alert("test");
            })
        });
    if(email==Real_email && password==Real_password){
        alert("correct username and password");
        }else{
        alert("Wrong username or password");    
        }
    }

在第一个按钮上单击它会给出意外的输出。 输出顺序是,

  1. 用户名或密码错误。
  2. 测试。(一段时间后...)

但是当我再次单击登录按钮(第二次单击)时,它会提供预期的输出。 输出顺序是,

  1. 测试。
  2. 正确的用户名和密码。

我也试过下面的代码,

async function login(){
    var email=document.getElementById("email").value;
    var password=document.getElementById("Password").value;
    var Real_email="";
    var Real_password="";
        await firebase.database().ref('/login').on('value',function(snapshot){
        snapshot.forEach(function (childsnapshot){
            Real_email=childsnapshot.val().email;
            Real_password=childsnapshot.val().password;
            alert("test");
            })
        });
    if(email==Real_email && password==Real_password){
        alert("correct username and password");
        }else{
        alert("Wrong username or password");    
        }
    }

但它返回相同的结果。

因此如何使用 javascript 在第一次点击时检索 firebase 实时数据库数据?

【问题讨论】:

    标签: javascript firebase asynchronous async-await


    【解决方案1】:

    当 firebase 调用有结果时,您编写的代码设置了一个回调方法。它与其余代码并行执行,有时 if 更快,有时不是,具体取决于 Internet 连接等。

    通常第一次调用会创建到远程服务器的连接,这通常比较慢。下一次调用(第二次单击等)存在可重用的现有连接,因此速度更快,执行速度更快。

    由于是异步代码,为了达到您正在寻找的结果,您可能希望将 if(email==Real_email && password==Real_password) 放在回调中以代替 alert()。选项 2 是如果您使呼叫阻塞,但这是非常糟糕的主意和不好的做法,因为您的“主 JS 线程”会挂起,甚至一些旧浏览器也可能会挂起。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-02
      • 2018-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-02
      相关资源
      最近更新 更多