Firebase同步导致延迟

Firebase同步导致延迟,firebase,polymer,Firebase,Polymer,我正在做一个项目,我将聚合物与Firebase结合使用。我有一个旋钮元素,它只是一个旋钮,它的值存储在Firebase中。旋钮的值由聚合物观察者观察,该值改变时更新firebase值 问题如下:当值在一个位置更改时,它会更新firebase值。这将向所有其他位置发出更改事件。在其他地方,这会使正在设置的元素中的值被触发,从而触发观察者。此观察者导致再次设置firebase值。这反过来又会产生变化,等等。。。这会导致调节旋钮时出现滞后现象。我能做什么 <script> Pol

我正在做一个项目,我将聚合物与Firebase结合使用。我有一个旋钮元素,它只是一个旋钮,它的值存储在Firebase中。旋钮的值由聚合物观察者观察,该值改变时更新firebase值

问题如下:当值在一个位置更改时,它会更新firebase值。这将向所有其他位置发出更改事件。在其他地方,这会使正在设置的元素中的值被触发,从而触发观察者。此观察者导致再次设置firebase值。这反过来又会产生变化,等等。。。这会导致调节旋钮时出现滞后现象。我能做什么

<script>

    Polymer({
        is: 'disco-ccontrol',

        properties: {
            midiValue: {
                type: Number,
                value: 0,
                observer: '_valueChanged',
                notify: true
            },
            channel: {
                type: Number,
                value: 0
            },
            channelNumber: {
                type: Number,
                value: 0
            },
            ref: {
                type: Object,
                computed: '_computeRef(channel, channelNumber)'
            }
        },

        _computeRef: function(channel, channelNumber) {

            var ref = new Firebase("https://incandescent-inferno-8405.firebaseio.com/user/"+this.channel+'/'+this.channelNumber);
            ref.on("child_changed", function(data) {
               this.midiValue = data.val();
            }.bind(this));

            return ref;
        },

        _valueChanged: function() {
            var message = { value: this.midiValue, channel: this.channel, channelNumber: this.channelNumber };
            if (this.ref) {
                this.ref.set(message);
            } 
        }

    });

</script>
代替我怎么样

ref.on("child_changed", function(data) {
你用

ref.once("child_changed", function(data) {
在启动时仅从firebase获取值&之后,您只更新firebase中的值


当然,这取决于您的整体应用程序架构,但从您在此处展示的内容来看,这似乎还可以。

ok不确定是否有足够的内容离开此处,提出一个好的建议。除此之外,也许你可以转向一些不那么紧密耦合的东西来找出一个可行的解决方案&然后在之后优化代码。你会想在你的_valueChanged处理程序中检测并跳过挂起的写操作。看见