首先,这个 lambda 只需点击一个按钮即可工作。当我刷新页面时按下按钮时,我从控制台收到一条“未定义”消息。但是当我等待一小会儿(没有刷新页面)并再次单击按钮时,我可以在控制台上看到我期望的值。为此,我想到了使用睡眠功能,但我不想使用它。我可以使用多线程程序中使用的机制(例如锁定/同步)来解决这个问题吗?重要的是,这是什么原因?请注意:我是 React 和 Web 开发的新手。代码;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);}
1 回答
尚方宝剑之说
TA贡献1788条经验 获得超4个赞
on()
是异步的并且立即返回。稍后,当查询完成时,回调将被调用,并且每次数据更改时都会再次调用。
在 JavaScript 中,只有一个线程。不需要锁定或多线程技术。所有代码和回调都在单个线程上调用。
您的代码应该只使用您传递给的回调内部的查询结果on()
。
如果您打算只查询一次而不监听可能随时间变化的结果,则应该使用once()
而不是on()
. once()
也是异步的,并返回带有查询结果的承诺。您应该学习如何使用这些 Promise,因为它们是您在 JavaScript 中处理异步结果的主要方式。
添加回答
举报
0/150
提交
取消