Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在firebase方法完成之前运行另一个方法的问题_Javascript_Reactjs_Firebase_Firebase Realtime Database - Fatal编程技术网

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

Javascript 在firebase方法完成之前运行另一个方法的问题,javascript,reactjs,firebase,firebase-realtime-database,Javascript,Reactjs,Firebase,Firebase Realtime Database,首先,这个lambda只需点击一个按钮即可工作。当我刷新页面时按下按钮,我从控制台收到一条“未定义”消息。但是,当我等待片刻(不刷新页面)并再次单击按钮时,我可以在控制台上看到我期望的值。为此,我想使用睡眠功能,但我不想使用它。我可以用多线程程序(如lock/synchronized)中使用的机制来解决这个问题吗 重要的是,这是什么原因 注意:我不熟悉react和web开发 代码 on()是异步的,并立即返回。该回调将在查询完成后一段时间调用,并且在每次数据更改时再次调用 在JavaScript

首先,这个lambda只需点击一个按钮即可工作。当我刷新页面时按下按钮,我从控制台收到一条“未定义”消息。但是,当我等待片刻(不刷新页面)并再次单击按钮时,我可以在控制台上看到我期望的值。为此,我想使用睡眠功能,但我不想使用它。我可以用多线程程序(如lock/synchronized)中使用的机制来解决这个问题吗

重要的是,这是什么原因

注意:我不熟悉react和web开发

代码

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);
}