簡體   English   中英

Firebase RTDB`ref.once()`被多次執行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM