firebase事务的奇怪行为

时间:2014-11-27 11:23:31

标签: firebase

我的firebase看起来像这样:

enter image description here

这是测试代码(咖啡脚本):

Firebase = require 'firebase'

ref = new Firebase 'https://my_firebase.firebaseio.com/items'

ref.once 'child_added', (snapshot) ->
  childRef = snapshot.ref()
  console.log "child_added", childRef.toString(), snapshot.val()
  childRef.transaction(
    (data) ->
      console.log 'transaction on data', data
      return if !data or data.my_key isnt 'my_val'
      data.my_key = 'new_val'
      return data
    ,
    (err, commited, snapshot) ->
      if err
        console.error 'error', err
        return
      console.log 'commited? '+commited
      console.log 'server data', snapshot.val()
    ,
    false
  )

输出:

child_added https://my_firebase.firebaseio.com/items/item1 { my_key: 'my_val' }
transaction on data null
commited? false
server data null

transaction(...)的第三个参数为真时,也会发生相同的情况。 要使此代码生效,我必须将ref.once 'child_added', (snapshot) ->更改为ref.on 'child_added', (snapshot) ->once更改为on)。在此更改输出后:

child_added https://my_firebase.firebaseio.com/items/item1 { my_key: 'my_val' }
transaction on data { my_key: 'my_val' }
commited? true
server data { my_key: 'new_val' }

似乎由于某些原因,当我使用once时,数据未正确同步且本地快照未更新且事务"认为"根据裁判没有数据。这是一个错误还是我做错了什么?我知道updateFunction可以多次调用的事务,以及第三个参数(我已经尝试过它的真假选项),但我仍然无法理解为什么事务在使用时不起作用{ {1}}获得一个孩子。

1 个答案:

答案 0 :(得分:5)

事务最终应该成功,并且运行在正确的数据状态,但最初将以“未缓存”状态运行,这意味着它将针对客户端的本地数据副本运行(可能是{{1} }),尝试将更改提交到服务器(将失败),然后重新尝试事务。

这是正常,并且是预期的。但是,如果交易没有成功,我建议您联系support@firebase.com上的支持人员继续解决问题。