2 回答
TA贡献1848条经验 获得超10个赞
将其余代码也放入回调中:
public void LevelComplete()
{
DatabaseCode.writeDatabase(SceneManager.GetActiveScene().buildIndex + 1, counter);
DatabaseCode.ReadFromDb(SceneManager.GetActiveScene().buildIndex + 1, (result) => {
Debug.Log("result " + result.ToString());
prevscore = result;
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex + 1);
});
}
TA贡献1790条经验 获得超9个赞
您的问题是您的 ReadFromDb 方法在完成之前返回。您可以通过将所有代码放入回调中来解决此问题(但您无法始终这样做),或者可以使用异步等待模式。
使 ReadFromDb 异步:
static public async Task ReadFromDb(int level, Action<int> callback)
{
int return_value = -1;
string sessionId = PlayerPrefs.GetString("SessionID");
await 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);
}
});
}
请注意前面的等待键,GetValueAsync().ContinueWith因为此精确代码是异步的,如果您想在获取结果之前保留代码执行,则需要等待。
在你的来电者中:
public async Task LevelComplete()
{
DatabaseCode.writeDatabase(SceneManager.GetActiveScene().buildIndex + 1, counter);
await 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);
}
此方法也变为异步(因为异步性会传播)。同样,await 关键字将继续执行,直到 readFromDb 方法完成。这意味着您的数据将准备就绪。
- 2 回答
- 0 关注
- 94 浏览
添加回答
举报