我的代码只适用于内部
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();
}
答案 0 :(得分:1)
alert
阻止代码运行直到它被解除。因此,在显示警报时,后面的代码尚未运行。
我不知道firebase,但是我会在你的alert
需要一些时间才能完成之前下注,并且你不应该运行后面的代码直到它完成。您可能会在两个查询之间发现相同的问题。
您应该查看您使用的各种方法的文档,看看它们是否返回promises,或接受回调作为参数。在任何一种情况下,这些都是在做其他事情之前等待某事完成的机制,如果你使用它们,你很可能会发现它会消失。
如果这不是问题,可能是您的location.reload()
导致浏览器在响应从服务器进入之前重新加载页面,因此child_added
事件已被触发。尝试移动或移除location.reload()
来电。