事务更新函数参数为空
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);
但警报总是 '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!"
。
这称为比较并设置操作,解释了为什么您的回调可能会被多次调用。
我无法进行交易,需要一些帮助
我使用 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);
但警报总是 '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!"
。
这称为比较并设置操作,解释了为什么您的回调可能会被多次调用。