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

时间:2018-02-01 03:12:54

标签: 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();

}

1 个答案:

答案 0 :(得分:1)

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

我不知道firebase,但是我会在你的alert需要一些时间才能完成之前下注,并且你不应该运行后面的代码直到它完成。您可能会在两个查询之间发现相同的问题。

您应该查看您使用的各种方法的文档,看看它们是否返回promises,或接受回调作为参数。在任何一种情况下,这些都是在做其他事情之前等待某事完成的机制,如果你使用它们,你很可能会发现它会消失。

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