Firebase同步导致延迟

时间:2015-09-11 18:00:04

标签: firebase polymer

我正在开发一个项目,我将Polymer与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>

1 个答案:

答案 0 :(得分:0)

如何而不是

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

你使用

ref.once("child_changed", function(data) {

仅在启动时获取firebase的值&amp;之后,您只更新firebase中的值。

当然取决于您的整体应用程序架构,但从您在此处显示的内容看来似乎没问题。