我正在使用Firebase數據庫,並且在事務中出現奇怪的錯誤。基本上,我已經叫關鍵「用戶」與參數計數和像這樣的用戶名單:Unity Firebase事務錯誤
"users" : {
"count" : 1,
"userList" : {
"LBBgLkOp3bWbZeSfnKVsqkHeW8s1" : true
}
}
我用交易來增加計數和當前用戶的ID添加到用戶列表。問題是,如果沒有一個用戶鍵(第一次)的交易完成成功地,但如果已經有一個用戶鍵入無故交易失敗...
我的代碼是這樣的
void AddUserAndIncrementCount()
{
FirebaseDatabase.DefaultInstance.GetReference("users")
.RunTransaction(usersData =>
{
Dictionary<string, object> users = usersData.Value as Dictionary<string, object>;
if (users == null)
{ // firstTime
users = new Dictionary<string, object>();
users.Add("count", 1);
users.Add("userList", new Dictionary<string, object>() { { auth.CurrentUser.UserId, true }});
}
else
{
/* printing users returns this
{"count":1,"userList":{"LBBgLkOp3bWbZeSfnKVsqkHeW8s1":true}}
*/
// INCREMENT COUNT
users["count"] = int.Parse(users["count"].ToString()) + 1;
// ADD USER TO LIST
Dictionary<string, object> userList = users["userList"] as Dictionary<string, object>;
userList.Add(auth.CurrentUser.UserId, true);
users["userList"] = userList;
}
// END TRANSACTION
/* printing users returns this now
{"count":2,"userList":{"LBBgLkOp3bWbZeSfnKVsqkHeW8s1":true,"AM2vI8K106XghEgEgRSkCIpJn0w2":true}}
*/
usersData.Value = users;
return TransactionResult.Success(usersData);
}).ContinueWith(OnAddUserIncrementCountTask);
}
void OnAddUserIncrementCountTask(Task<DataSnapshot> task)
{
if (task.IsCompleted && !task.IsCanceled && !task.IsFaulted)
{
//Success
}
else
{
Debug.Log(task.IsFaulted+" - "+task.Exception.Message);
// True - Exception of type 'System.AggregateException' was thrown.
}
}
正如你所看到的,我打印了我在交易中接收和發送的內容,一切看起來都很好。我試圖將規則設置爲public(讀取true和寫入true),並且它也失敗了,所以我不知道我是否做了不好的事情或者事務出了什麼問題。困擾我的事情是,如果用戶密鑰不存在於數據庫中,那麼它不會失敗,所以我認爲這是因爲一些奇怪的原因我無法看到失敗...
我正在測試一個Android設備。
謝謝。
Firebase開發者在這裏。感謝您找到解決方法Juan和我對此問題表示歉意。這將在我們的下一個SDK版本1.1.3中修復。 –
你好,沒問題,我一週前向你的支持團隊彙報過,這對我來說不是一個大問題,但很難理解爲什麼它會失敗。 Firebase太棒了!保持良好的工作:) –