第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何正確阻止代碼執(zhí)行直到回調(diào)

如何正確阻止代碼執(zhí)行直到回調(diào)

C#
滄海一幻覺 2023-09-16 17:27:24
我是 Unity 和 C# 新手,并嘗試查詢我的 Firebase 實(shí)時(shí)數(shù)據(jù)庫,但代碼不會(huì)阻止回調(diào)完成。我嘗試過實(shí)現(xiàn)回調(diào),但這似乎不起作用。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());之前執(zhí)行prevlevelscore = result;,我想確保prevlevelscore在執(zhí)行之前更新的值Debug.Log。
查看完整描述

2 回答

?
慕桂英546537

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);

    });    

}


查看完整回答
反對(duì) 回復(fù) 2023-09-16
?
富國滬深

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)備就緒。


查看完整回答
反對(duì) 回復(fù) 2023-09-16
  • 2 回答
  • 0 關(guān)注
  • 135 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)