[英]Firebase RTDB `ref.once()` being executed multiple times
最近使用.once('value', v => ...)
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庫上的錯誤嗎? 已知問題? 我做錯了什么還是我誤會了?
正如@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()
工作方式的誤解。
謝謝,
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.