事务更新函数参数为空

Transcation updateFunction parameter is null

我无法进行交易,需要一些帮助

我使用 FB 应用仪表板创建了以下数据库结构: 闪烁热 528 测试 设置:"hello"

我可以在仪表板中看到数据在那里:

然后我做:

var settingsRef=new Firebase('https://flickering-heat-528.firebaseio.com/test/settings');

settingsRef.transaction(function(json) {
    alert(json);
}, function(error, committed, snapshot) {
}, true);

jsfiddle

但警报总是 'null' 为什么 ??

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);

现在你的函数 returns "hello!"。 Firebase 再次发送它给你的值和你返回给服务器的值:"hello""hello!"。服务器进行与以前相同的比较,如果数据库中的值仍然是 "hello",它会设置您指定的新值 "hello!"

这称为比较并设置操作,解释了为什么您的回调可能会被多次调用。