Firebase RTDB ' ref.once() '被多次执行
Firebase RTDB `ref.once()` being executed multiple times
最近玩firebase RTDB,我一直在使用.once('value', v => ...)
来构建我的应用程序的GUI。确切的代码如下:
<script>
function onAuthCompleted(usr) {
var salesTxRef = firebaseApp.database().ref('/salesTx').limitToLast(5);
salesTxRef.once("value", salesTx => {
salesTx.forEach(txRef => {
const tx = txRef.val();
const $item = $('<li></li>').html('<a href="' + txRef.key + '">$' + tx.total + ' <small>' + tx.currencyCode + '</small></a>');
$('.main ul').append($item);
});
});
}
</script>
问题是,如果我让页面打开足够长的时间,.once()
被调用多次(每2-3小时一次)。这是javascript库上的一个bug吗?已知的问题?是我做错了什么,还是我有什么误解?
正如@Frank van Puffelen在评论中指出的,问题来自于调用onAuthCompleted(usr)
的方法:
firebaseApp.auth().onAuthStateChanged(function(user) {
if (user) {
if (typeof onAuthCompleted == 'function') {
onAuthCompleted(user);
}
} else {
console.log('User is not logged in. Cannot start session.');
}
}, function(error) {
console.log(error);
});
每小时调用onAuthStateChanged()
以刷新会话导致onAuthCompleted()
再次被调用,从而再次注册.once()
方法(每~小时)。这导致了奇怪的感知行为。
我可以确认.once()
按预期工作,这是我对onAuthStateChange()
如何工作的误解。
谢谢,
相关文章:
- 无法在通过jQuery的ajax加载的页面中执行javascript
- JavaScript执行暂时挂起页面
- 如何在ReactJS JSX中执行嵌套的if-else语句
- 当js函数's已执行
- 哪个先执行
- 在使用Polymer'加载所有json文件后执行方法;s的核心ajax
- HTML表单提交时未执行外部函数
- 在Safari执行javascript之前对其进行修改
- Amd,希望确保某个东西总是最后执行
- 在Windows 10中自动执行例行程序(主要与浏览器交互)
- 递归使用 eval() 是检查程序执行的好方法吗?
- 如何做到这一点,使代码在不传递条件后执行函数
- 如何在执行此特定onclick事件时执行JavaScript函数
- 如何在从浏览缓存加载页面时执行javascript
- Jquery表单验证插件-如果选中复选框,如何在提交时执行某些操作
- Jquery:代码在rails中的页面加载时未执行
- 如何防止jQueryonclick事件中的Ruby方法在页面刷新时执行
- JavaScript动画从不执行
- 为什么onsubmit函数似乎没有执行
- Firebase RTDB ' ref.once() '被多次执行