2017-05-29 31 views
3

我正在使用firebase並且我在Javascript中編寫了一個簡單函數來設置和更新數據。Firebase的SET方法不起作用

function setLastOnline(userID, InOut){ 
    var dbLastonline = firebase.database().ref().child("lastonline"); 
    if (InOut) { 
     dbLastonline.child(userID).set({ 
      "isConnected":true, 
      "connectedby":"web", 
      "lastIn":firebase.database.ServerValue.TIMESTAMP, 
      "lastOut":0 
     }); 
    } else { 
     dbLastonline.child(userID).update({ 
      "isConnected":false, 
      "connectedby":"web", 
      "lastOut":firebase.database.ServerValue.TIMESTAMP 
     }); 
    } 
} 

當我打電話要執行的功能設置方法,什麼也沒有發生......在數據庫中無誤碼無數據...

firebase.auth().onAuthStateChanged(function(user) { 
     if (user) { 
      setLastOnline(user.uid, true); 
     } 
     } 

但是,當我調用同一個函數來執行更新,一切工作正常。

firebase.auth().onAuthStateChanged(function(user) { 
     if (user) { 
      setLastOnline(user.uid, false); 
      firebase.auth().signOut(); 
     }` 
    }` 

我在做什麼錯了?

在此先感謝。

+0

我不會立即看到這段代碼有什麼問題。你能創建一個重現問題的jsbin嗎? –

+0

在** set **調用之前添加一個打印,以確保您的代碼正在按預期運行... –

+0

我已經測試了一切。該代碼正在執行,但不記錄在數據庫中。在今天的測試中,我在Chrome控制檯中發現了Firebase的VERBOSE:** [違規]避免在www.gstatic.com/firebasejs/3.6.8/firebase.js**的第362行使用document.write()。它出現在執行SET方法的恰好時刻。 –

回答

1

我發現了錯誤。上述功能是正確的,並且運作良好。問題是我在調用setLastOnline()之後不久調用了window.open()。就像這樣:

firebase.auth().onAuthStateChanged(function(user) { 
     if (user) { 
      setLastOnline(user.uid, true); 
      window.open('another_page.php','_self'); 
     } 
     } 

所以火力地堡的停止執行和VERBOSE在Chrome控制檯([違反]避免在www.gstatic.com/firebasejs/3.6.8/firebase的362線使用document.write() .js)出現。

問候!

+1

好抓!細節決定成敗... ;) –