【发布时间】:2014-11-27 11:23:30
【问题描述】:
我的火力基地是这样的:
这是测试代码(咖啡脚本):
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(...) 的第三个参数为 true 时也会发生同样的情况。
为了使这段代码正常工作,我必须将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 可以被多次调用的事务,以及关于第三个参数(我已经尝试过 true 和 false 选项)但我仍然不明白为什么使用 once 获取时事务不起作用一个孩子。
【问题讨论】:
标签: firebase