2 回答

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超10個(gè)贊
將其余代碼也放入回調(diào)中:
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貢獻(xiàn)1790條經(jīng)驗(yàn) 獲得超9個(gè)贊
您的問題是您的 ReadFromDb 方法在完成之前返回。您可以通過將所有代碼放入回調(diào)中來解決此問題(但您無法始終這樣做),或者可以使用異步等待模式。
使 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);
}
});
}
請(qǐng)注意前面的等待鍵,GetValueAsync().ContinueWith因?yàn)榇司_代碼是異步的,如果您想在獲取結(jié)果之前保留代碼執(zhí)行,則需要等待。
在你的來電者中:
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);
}
此方法也變?yōu)楫惒剑ㄒ驗(yàn)楫惒叫詴?huì)傳播)。同樣,await 關(guān)鍵字將繼續(xù)執(zhí)行,直到 readFromDb 方法完成。這意味著您的數(shù)據(jù)將準(zhǔn)備就緒。
- 2 回答
- 0 關(guān)注
- 135 瀏覽
添加回答
舉報(bào)