在firebase方法完成reactjs之前运行另一个方法的问题

首先,这个 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);

}


素胚勾勒不出你
浏览 104回答 1
1回答

尚方宝剑之说

on()是异步的并且立即返回。稍后,当查询完成时,回调将被调用,并且每次数据更改时都会再次调用。在 JavaScript 中,只有一个线程。不需要锁定或多线程技术。所有代码和回调都在单个线程上调用。您的代码应该只使用您传递给的回调内部的查询结果on()。如果您打算只查询一次而不监听可能随时间变化的结果,则应该使用once()而不是on(). once()也是异步的,并返回带有查询结果的承诺。您应该学习如何使用这些 Promise,因为它们是您在 JavaScript 中处理异步结果的主要方式。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript