Передача строки из IEnumerator в void

Я пытаюсь передать строку из IEnumerator в пустоту. но строка продолжает выходить нулевой: вот мой код: я новичок в этом, поэтому, пожалуйста, помогите Спасибо всем.

моя пустота

public void ResisterButton ()
{   
    //checked Username
    if (Username != "") {
        StartCoroutine (CheackDBUN (Username));
        Debug.LogWarning("User Data String in ResisterButton " + userDataString); // not work is empty :(


    // do stuff with text eg turn bool UN = true

больше кода не делать с этим

и IEnumerator

IEnumerator CheackDBUN(string UsernamePost ){
    WWWForm form = new WWWForm ();
    form.AddField ("usernamePost", UsernamePost);

    WWW userData = new WWW(checkUsernameURL, form);
    yield return userData;
    string userDataString = userData.text;
    Debug.LogWarning("User Data String in CheackDBUN " + userDataString); //Working has text
    yield return (userDataString);
}

MySQL и PHP-код все работает нормально

Спасибо, надеюсь, что работает, если нужно знать больше, пожалуйста, спросите

2 ответа

Решение

Вы должны дождаться окончания сопрограммы, прежде чем использовать userDataString результат. Даже если ты не меняешься userDataString в CheackDBUN (что, я полагаю, было вашим намерением), вы все еще можете видеть, что User Data String in ResisterButton зарегистрирован раньше User Data String in CheackDBUN,

Вы можете использовать делегата обратного вызова, чтобы сказать сопрограмму, что делать с userDataString как только это закончено

public void ResisterButton ()
{    
    if (Username != "")
    {           
        StartCoroutine(CheackDBUN(Username,
            (userDataString) =>
            {
                Debug.LogWarning("User Data String in ResisterButton " + userDataString); 
                // do stuff with text eg turn bool UN = true
            }
            ));
    }
}


IEnumerator CheackDBUN(string UsernamePost, Action<string> callback){
    WWWForm form = new WWWForm ();
    form.AddField ("usernamePost", UsernamePost);

    WWW userData = new WWW(checkUsernameURL, form);
    yield return userData;
    string userDataString = userData.text;
    Debug.LogWarning("User Data String in CheackDBUN " + userDataString); //Working has text
    callback(userDataString);
}

Вам нужно заставить функцию void принимать строку примерно так:

public void ResisterButton (string str){   

А затем передайте ему строку пользовательских данных следующим образом:

Debug.LogWarning("User Data String in CheackDBUN " + userDataString); //Working has text
ResisterButton(userDataString);
yield return (userDataString);
Другие вопросы по тегам