передача строки из 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 работает нормально

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


person user2960145    schedule 22.07.2017    source источник
comment
Ваш вопрос сбивает с толку. Вы даже не передаете userDataString функции. Вы проезжаете Username. В чем проблема?   -  person Programmer    schedule 22.07.2017


Ответы (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);
}
person Pluto    schedule 22.07.2017
comment
Большое спасибо :) - person user2960145; 22.07.2017

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

public void ResisterButton (string str){   

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

Debug.LogWarning("User Data String in CheackDBUN " + userDataString); //Working has text
ResisterButton(userDataString);
yield return (userDataString);
person Bassel Bitar    schedule 22.07.2017
comment
Это тоже хорошо работает, просто нужно остановить это сейчас, спасибо :) - person user2960145; 22.07.2017