Unity 5中使用StartCoroutine的命令执行顺序/yield return www
The order of command execution in Unity 5 using StartCoroutine / yield return www
有 2 个 c# 脚本,附加到同一个游戏对象 (Unity 5.4)
public class SignIn : MonoBehaviour
{
private SendRequest sendRequest;
void Start()
{
sendRequest = GetComponent<SendRequest>();
}
public void signInPressed()
{
WWWForm form = new WWWForm();
form.AddField("key", "value");
sendRequest.POST(mainSettings.appUrl, form);
Debug.Log("SIGNIN");
}
}
和
public class SendRequest : MonoBehaviour {
public WWW POST(string url, WWWForm form)
{
WWW www = new WWW(url, form);
StartCoroutine(WaitForRequest(www));
return www;
}
private IEnumerator WaitForRequest(WWW www)
{
yield return www;
if (www.error == null)
{
Debug.Log("WWW Ok!: " + www.text);
}
else
{
Debug.Log("WWW Error: " + www.error);
}
}
}
当我尝试执行这些脚本时,首先显示 SIGNIN 行,然后是服务器响应。
如何先得到服务器的响应,然后再继续程序?
我做错了什么?
看这里:
StartCoroutine(WaitForRequest(www));
return www;
您的方法 returns www
对象,无需等待 WaitForRequest(www)
完成。如果你没有使用 www
returned 从 POST()
方法为什么你 return 它。
如何解决:
传递 delegate
参数以在 coroutine
完成时触发。
例如:
sendRequest.POST(mainSettings.appUrl, form, () => { Debug.Log("SIGNIN");});
和POST()
的定义:
public WWW POST(string url, WWWForm form, Action callback = null)
{
WWW www = new WWW(url, form);
StartCoroutine(WaitForRequest(www, callback));
}
和WaitForRequest()
的定义:
private IEnumerator WaitForRequest(WWW www, Action callback = null)
{
yield return www;
if (www.error == null)
{
Debug.Log("WWW Ok!: " + www.text);
}
else
{
Debug.Log("WWW Error: " + www.error);
}
if(callback != null)
{
callback();
}
}
希望对您有所帮助
有 2 个 c# 脚本,附加到同一个游戏对象 (Unity 5.4)
public class SignIn : MonoBehaviour
{
private SendRequest sendRequest;
void Start()
{
sendRequest = GetComponent<SendRequest>();
}
public void signInPressed()
{
WWWForm form = new WWWForm();
form.AddField("key", "value");
sendRequest.POST(mainSettings.appUrl, form);
Debug.Log("SIGNIN");
}
}
和
public class SendRequest : MonoBehaviour {
public WWW POST(string url, WWWForm form)
{
WWW www = new WWW(url, form);
StartCoroutine(WaitForRequest(www));
return www;
}
private IEnumerator WaitForRequest(WWW www)
{
yield return www;
if (www.error == null)
{
Debug.Log("WWW Ok!: " + www.text);
}
else
{
Debug.Log("WWW Error: " + www.error);
}
}
}
当我尝试执行这些脚本时,首先显示 SIGNIN 行,然后是服务器响应。
如何先得到服务器的响应,然后再继续程序? 我做错了什么?
看这里:
StartCoroutine(WaitForRequest(www));
return www;
您的方法 returns www
对象,无需等待 WaitForRequest(www)
完成。如果你没有使用 www
returned 从 POST()
方法为什么你 return 它。
如何解决:
传递 delegate
参数以在 coroutine
完成时触发。
例如:
sendRequest.POST(mainSettings.appUrl, form, () => { Debug.Log("SIGNIN");});
和POST()
的定义:
public WWW POST(string url, WWWForm form, Action callback = null)
{
WWW www = new WWW(url, form);
StartCoroutine(WaitForRequest(www, callback));
}
和WaitForRequest()
的定义:
private IEnumerator WaitForRequest(WWW www, Action callback = null)
{
yield return www;
if (www.error == null)
{
Debug.Log("WWW Ok!: " + www.text);
}
else
{
Debug.Log("WWW Error: " + www.error);
}
if(callback != null)
{
callback();
}
}
希望对您有所帮助