我的代码只能在内部正常工作
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/