2017-09-16 7 views
1

1分間隔でfirebaseエントリの特定の値を更新したいと考えています。私はこれを行う方法を確認していないが、以下を試してみました:区間のfirebaseエントリを更新する

var interval = setInterval(function(){ 
    database.ref().on('value',function(snapshot){ 
    snapshot.forEach(function(childSnapshot) { 
     var item = childSnapshot.val(); 
     item.key = childSnapshot.key; 
     database.ref(item.key).update({ item.trainTimeLeft: moment(item.trainFrequency).subtract(moment(moment(Date.now())).diff(item.trainTimeStamp,"minutes"),"minutes") }); 

    }); 
    }); 

},60000); 

私は(私は更新列車のスケジュールを作成しようとしています)の時間差をmoment.jsを使用しています。すべてのエントリはfirebaseのメインブランチにあります。

+0

iはまたfirebaseの要素が存在する場合にのみ、これを行うに条件を追加する次の例では、 からデータベースをポストの星数を取得 のソーシャルブログアプリケーションを示しています – cerrach

答えて

1

setInterval()を使用して、必要なXマイル秒ごとに機能をトリガーします。

firebase.database.ref()を使用して、更新するデータベースノードにアクセスします。

.update()を使用してデータベースノードの値を更新します。

firebase.database.ServerValue.TIMESTAMPを使用してサーバー時間を取得します。クライアントタイムスタンプの使用は、異なるタイムゾーンによって安全ではありません。

これであなたの機能を書くことができます。

const servetTime = firebase.database.ServerValue.TIMESTAMP; 
setInterval(() => { 
    database.ref('myNode').on('value',(snapshot) => { 
    snapshot.val() && 
    const updatedDate = snapshot.val().storageTime ? snapshot.val().storageTime - serverTime : serverTime; 
    snapshot.ref().update({ storageTime: updatedDate }) 
    }); 
}, 5000); 

このコードはコピー/ペーストソリューションではなく、例として考えてください。

希望します。

0

データベースのポーリングには意味がありません。むしろ、値(変更)イベントをリッスンすることを伝えてください。重要Read and Write Data on the Web

から

:値イベントは子供たちへの変更を含め、毎回データが 指定されたデータベースの参照に変更されると呼ばれています。スナップショットのサイズを に制限するには、 が変更を監視するために必要な最低レベルでのみ添付します。たとえば、リスナーを のルートに接続することはお勧めしません。

var starCountRef = firebase.database().ref('posts/' + postId + '/starCount'); 
starCountRef.on('value', function(snapshot) { 
    updateStarCount(postElement, snapshot.val()); 
}); 
関連する問題