【发布时间】:2019-08-22 10:28:14
【问题描述】:
我是 Unity 和 C# 的新手,并尝试查询我的 Firebase 实时数据库,但代码不会阻止回调完成。
我尝试过实现回调,但这似乎不起作用。
static public void ReadFromDb(int level, Action<int> callback)
{
int return_value = -1;
string sessionId = PlayerPrefs.GetString("SessionID");
FirebaseDatabase.DefaultInstance.GetReference("users/"+sessionId).GetValueAsync().ContinueWith(task => {
if (task.IsFaulted)
{
// Handle the error...
Debug.Log("Task faulted");
callback(return_value);
}
else if (task.IsCompleted)
{
DataSnapshot snapshot = task.Result;
string score_string = (snapshot.Child(level.ToString()).Value).ToString();
Debug.Log("score_string " + score_string);
return_value = int.Parse(score_string);
callback(return_value);
}
});
}
public void LevelComplete()
{
DatabaseCode.writeDatabase(SceneManager.GetActiveScene().buildIndex + 1, counter);
DatabaseCode.ReadFromDb(SceneManager.GetActiveScene().buildIndex + 1, (result) => {
prevlevelscore = result;
Debug.Log("result " + result.ToString());
});
prevscore = prevlevelscore;
Debug.Log("Returned value: " + prevlevelscore.ToString());
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex + 1);
}
在LevelComplete() 中,Debug.Log("Returned value: " + prevlevelscore.ToString()); 在prevlevelscore = result; 之前执行
我想确保在执行Debug.Log 之前更新prevlevelscore 的值。
【问题讨论】:
-
好吧,因为它不是回调的一部分...如果它应该是延迟代码的一部分,您应该将
Debug.Log("Returned value: " + prevlevelscore.ToString());放在回调中...
标签: c# firebase unity3d firebase-realtime-database callback