bugfix> firebase > 投稿

バージョン1.0より前は DeltaSnapshot.changed() を使用していました受信データの下でデータが変更された場合、データベース関数をチェックインします。 しかし、v 1.0にアップグレードすると、このメソッドは使用できなくなります。 この機能を複製する他の方法はありますか?

1つの方法は before を使用することですおよび after そして、変更を確認する必要があるノードの下のループの子。 この操作を実行するより良い方法はありますか?

回答 3 件
  • 他の回答で述べたように、変更されたチェックの機能を持つために独自のメソッドを作成する必要があります。だから、ここでのヘルパーは、特定の場所でオブジェクトを比較するためのものです相対パス(ルート/からの絶対パスではありません)イベントデータ。

    'use strict';
    let _ = require('lodash');
    /**
     *
     * @param data Change<DataSnapshot> object received in the event.
     * @param path Relative path in the data object received in the function.
     * @returns {boolean} return true if there is a change in data of before and
     * after snapshot , false if the values are identical
     */
    function isChanged(data, path) {
        let before = data.before.child(path);
        let after = data.after.child(path);
        if (before.exists() && !after.exists() ||
            !before.exists() && after.exists()) {
            return true;
        }
        else {
            return !_.isEqual(before.val(), after.val());
        }
    }
    
    module.exports = {
        isChanged
    };
    
    

  • より良い方法はありません。ザ・ before  および after  フィールドは、書き込みイベントまたは更新イベント中に何が変更されたかを示す唯一の指標です。

  • 変更前のデータと変更後のデータを比較する必要があります。

    if (change.after.val().valToCompare !== change.before.val().valToCompare) {
        << your code here >>
    }
    
    

あなたの答え