2016-07-02 5 views
0

最近Firebase RTDBで遊んでいますが、私は.once('value', v => ...)を使ってアプリケーションのGUIを構築しています。下記の正確なコード:Firebase RTDB `ref.once()`が複数回実行されています

<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ライブラリのバグですか?既知の問題?私が間違ってやっていることや、私の誤解がありますか?

+2

「onAuthCompleted()」と呼ばれるものはありますか?これはFirebase認証の 'onAuthStateChanged()'コールバックに基づいているため、アクセストークンがリフレッシュされるときに毎時呼び出されるためです。 –

答えて

0

@FrankバンPuffelenコメントで指摘したように、問題はonAuthCompleted(usr)と呼ばれる方法から来た:セッションをリフレッシュする時間給と呼ばれてonAuthStateChanged()onAuthCompleted()は、このように登録再び呼び出される原因となった

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); 
}); 

.once()方法をもう一度(毎時〜)行う。それは奇妙な知覚される行動を引き起こしていました。

私は.once()が期待どおりに動作することを確認できますが、それは私がどのように誤解してonAuthStateChange()が動作するかを確認するものです。

ありがとう、

関連する問題