JavaScript 异步调用仅适用于alert()

标签 javascript firebase alert

我的代码只能在内部正常工作

alert(tickerSymbol);

我是 JavaScript 新手,所以我不确定为什么会发生这种情况。有人可以帮助我理解为什么警报超时可以解决我的问题吗?

database.ref("users")...

如果没有警报,我上面的第二个 firebase 调用就永远不会实现。

function quote_search(json) {

    var database = firebase.database();

    var tickerSymbol = json.symbol;
    var userId = firebase.auth().currentUser.uid;

    alert(tickerSymbol);


    database.ref('users/' + userId).update({

        "current_ticker": tickerSymbol

    });//end firebasecall


    database.ref("users").orderByChild(userId + "/current_ticker").on("child_added", function(snapshot) {

        var userCurrentTicker = snapshot.val().current_ticker;


        var test = localStorage.setItem('tickerStored', userCurrentTicker);


    });//END FIREBASE

    location.reload();

}

最佳答案

警报会阻止代码运行,直至其被解除。因此,在显示警报时,后面的代码尚未运行。

我不了解 firebase,但我敢打赌,alert 之前的某些操作需要一些时间才能完成,并且在完成之前您不应该运行后面的代码。您可能会发现两个查询之间存在相同的问题。

您应该查看您使用过的各种方法的文档,看看它们是否返回 promises ,或接受回调作为参数。无论哪种情况,这些都是在执行其他操作之前等待某些操作完成的机制,如果您使用它们,您可能会发现错误消失了。

如果这不是问题,则可能是您的 location.reload() 导致浏览器在服务器返回响应之前重新加载页面,因此 child_added 事件已触发。尝试移动或删除 location.reload() 调用。

关于JavaScript 异步调用仅适用于alert(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48554756/

相关文章:

javascript - 在 asp.net MVC 中更改文本框日期时的消防 Controller 代码

java - 如何将文件/位图上传到 Cloud Firestore?

android - 具有多个 "EqualTo"的 Firebase android 查询

angular - 警报服务在 Angular 2 中不起作用

javascript - 如何在 javascript 中只显示一次警报?

javascript - Laravel 中的路由,ajax 中的 URL 解析

javascript - 向 Javascript 错误添加上下文

javascript - 如何使我的导航栏具有响应能力?

java - 屏幕未反射(reflect) Android 中 Firebase 数据库的更改

ios - UIAlert 错误,其 View 不在窗口层次结构中