【问题标题】:Data inconsistency in the Google+ Hangout App shared data object?Google+ 环聊应用共享数据对象中的数据不一致?
【发布时间】:2015-07-27 23:01:48
【问题描述】:

使用 submitDelta、setValue、clearValue 和 getState 设置和获取值时,我得到不一致的结果。这些似乎是异步方法,所以我的同步命令(例如,console.log)使用本地数据对象执行。然后最终共享数据对象更新,进而更新本地数据对象。这是一个正确的评估吗?有没有办法同步运行这些数据命令,即等待共享数据对象更新后再继续程序?

【问题讨论】:

    标签: google-plus hangout


    【解决方案1】:

    是的,Hangouts API 中的数据操作是异步的。要实现同步,您必须收听 onStateChanged events 并仅继续您在这些事件中所做的任何事情。

    将为所有参与者调用该事件,包括触发更改的本地参与者。

    【讨论】:

      【解决方案2】:

      似乎不可能编写同步共享数据对象调用,因为如果您的代码中有多个 onStateChange,它们会一起触发。换句话说,我不能将一个共享数据对象更新绑定到一个 onStateChange

      看起来 Google+ 环聊按以下顺序执行数据库 API:

      1. 获取和设置本地数据对象中的值(使用getState

      2. 使用 getState 从共享数据对象中获取值。

      3. 更改共享数据对象中的值(setValueclearValuesubmitDelta 等)。

      4. onStateChange 监听共享数据对象的变化。

      以下(伪)代码

      setValue('counter', '11')
      getValue('counter')
      onStateChanged (getValue('counter'))
      
      submitDelta( {'counter': '22'} )
      getValue('counter')
      onStateChanged (getValue('counter'))
      
      clearValue('counter')
      getValue('counter')
      onStateChanged (getValue('counter'))
      
      submitDelta( {'counter': '33'} )
      getValue('counter')
      onStateChanged (getValue('counter'))
      

      会回来

      undefined undefined undefined undefined 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33

      因为四个getValue先执行,然后是setValuesubmitDeltaclearValue submitDelta 执行,然后四个 onStateChanged 一起执行,每个执行四次,因为共享数据对象被更改了四次。

      听起来对吗?

      【讨论】:

        猜你喜欢
        • 2015-03-18
        • 2016-08-19
        • 1970-01-01
        • 2019-06-01
        • 2019-02-26
        • 1970-01-01
        • 2019-10-28
        • 1970-01-01
        • 2023-04-03
        相关资源
        最近更新 更多