Javascript 在firebase方法完成之前运行另一个方法的问题
首先,这个lambda只需点击一个按钮即可工作。当我刷新页面时按下按钮,我从控制台收到一条“未定义”消息。但是,当我等待片刻(不刷新页面)并再次单击按钮时,我可以在控制台上看到我期望的值。为此,我想使用睡眠功能,但我不想使用它。我可以用多线程程序(如lock/synchronized)中使用的机制来解决这个问题吗 重要的是,这是什么原因 注意:我不熟悉react和web开发 代码Javascript 在firebase方法完成之前运行另一个方法的问题,javascript,reactjs,firebase,firebase-realtime-database,Javascript,Reactjs,Firebase,Firebase Realtime Database,首先,这个lambda只需点击一个按钮即可工作。当我刷新页面时按下按钮,我从控制台收到一条“未定义”消息。但是,当我等待片刻(不刷新页面)并再次单击按钮时,我可以在控制台上看到我期望的值。为此,我想使用睡眠功能,但我不想使用它。我可以用多线程程序(如lock/synchronized)中使用的机制来解决这个问题吗 重要的是,这是什么原因 注意:我不熟悉react和web开发 代码 on()是异步的,并立即返回。该回调将在查询完成后一段时间调用,并且在每次数据更改时再次调用 在JavaScript
on()
是异步的,并立即返回。该回调将在查询完成后一段时间调用,并且在每次数据更改时再次调用
在JavaScript中,只有一个线程。不需要锁定或多线程技术。所有代码和回调都在单个线程上调用
您的代码应该只使用从您传递给on()
的回调内部的查询结果
如果您打算只查询一次,而不侦听可能随时间变化的结果,则应使用once()
而不是on()
once()
也是异步的,它返回一个包含查询结果的承诺。您应该学习如何使用这些承诺,因为它们主要是如何在JavaScript中处理异步结果的
const handleAddCarPark = () => {
var dbRef = fire.database().ref("foo/bar/qux");
var newParkID;
var copy_count;
dbRef.child("count").on("value", snapshot => {
newParkID = parseInt(snapshot.val()) + 1000000;
copy_count = parseInt(snapshot.val());
});
console.log(newParkID);
}