【问题标题】:Firebase functions v 1.0: Alternative of DeltaSnapshot.changed() after v 1.0Firebase 函数 v 1.0:在 v 1.0 之后替代 DeltaSnapshot.changed()
【发布时间】:2018-11-04 12:31:11
【问题描述】:

在 1.0 版之前,我使用DeltaSnapshot.changed() 来检查我的数据库函数,如果数据在传入数据下发生更改。 但现在升级到 v 1.0 后,该方法不再可用。 有没有其他方法可以复制此功能?

一种方法是使用beforeafter 以及我需要检查更改的节点下的循环子项。 有没有更好的方法来执行这个操作?

【问题讨论】:

    标签: firebase firebase-realtime-database google-cloud-functions


    【解决方案1】:

    您确实必须自己比较之前和之后的数据,看看发生了什么变化。

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

    【讨论】:

      【解决方案2】:

      没有更好的方法。 beforeafter 字段是您在写入或更新事件期间发生更改的唯一指示。

      【讨论】:

        【解决方案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
        };

        【讨论】:

          猜你喜欢
          • 2014-12-25
          • 2014-10-12
          • 2014-08-19
          • 1970-01-01
          • 2014-08-03
          • 1970-01-01
          • 2016-02-15
          • 2010-09-07
          • 1970-01-01
          相关资源
          最近更新 更多