我无法让交易工作并需要一些帮助
我使用FB应用仪表板创建了以下数据库结构: 闪烁热-528 测试 设置:"你好"
我可以在仪表板中看到数据存在:
然后我做了:var settingsRef=new Firebase('https://flickering-heat-528.firebaseio.com/test/settings');
settingsRef.transaction(function(json) {
alert(json);
}, function(error, committed, snapshot) {
}, true);
请参阅jsfiddle
但警报总是“无效”。为什么??
答案 0 :(得分:1)
Firebase中的交易回调可能会多次触发。要理解为什么,请看看如何执行此操作。
让我们从这个逻辑开始:如果当前值为null,您希望它变为" byebye"。
settingsRef.transaction(function(current) {
if (!current) {
return "byebye";
}
return current;
}, function(error, committed, snapshot) {
}, true);
Firebase客户端还不知道您的settings
节点的值,因此它会假设:当前值为null
来调用您的事务。然后,它会发送给您的值和您返回Firebase服务器的值的组合。
Firebase服务器会将数据库中的当前值("hello"
)与其提供给您的值进行比较,并确定它们不匹配("hello" <> null
)。因此它将当前值("hello"
)发送回客户端。
Firebase客户端再次调用您的回调。这次它传递了从服务器("hello"
)听到的值:
settingsRef.transaction(function(current) {
if (!current) {
return "byebye";
}
return current + "!";
}, function(error, committed, snapshot) {
}, true);
所以现在你的函数返回"hello!"
。 Firebase会再次发送它为您提供的值以及您返回给服务器的值:"hello"
和"hello!"
。服务器执行与以前相同的比较,如果数据库中的值仍为"hello"
,则设置您指定的新值"hello!"
。
这称为比较和设置操作,并解释了为什么您的回调可能被多次调用。