Tôi đang làm việc trên một trò chơi thống nhất và gặp phải một vấn đề mà tôi không thể giải quyết. Tôi đang kết nối với máy chủ web thông qua đối tượng WWW tiêu chuẩn và sử dụng một coroutine để thực thi yêu cầu POST.Unity - cần trả lại giá trị chỉ sau khi coroutine kết thúc
Mã hoạt động, nhưng tôi cần phải cập nhật giá trị biến và trả về biến đó khi kết thúc coroutine, mà tôi không thể làm.
public int POST(string username, string passw)
{
WWWForm form = new WWWForm();
form.AddField("usr", username);
form.AddField("pass", passw);
WWW www = new WWW(url, form);
StartCoroutine(WaitForRequest(www));
//problem is here !
return success_fail;
}
private IEnumerator WaitForRequest(WWW www)
{
yield return www;
if (www.error == null)
{
if(www.text.Contains("user exists"))
{
success_fail = 2;
}
else
{
success_fail=1;
}
} else {
success_fail=0;
}
}
Coroutine cập nhật giá trị của 'success_fail' với giá trị có liên quan. Nhưng 'return success_fail;' dòng trong phương thức POST chạy trước khi coroutine kết thúc, làm cho nó trả về một giá trị sai.
Tôi đã cố gắng sử dụng một coroutine bổ sung nhưng không thành công, giả sử rằng tôi đã có một lỗi ở đó là tốt. Làm thế nào tôi có thể trả về giá trị 'success_fail' chỉ sau khi coroutine kết thúc?
Cảm ơn.
Nếu bạn gọi một coroutine khác, nó sẽ đợi cho đến khi coroutine đó kết thúc. http://answers.unity3d.com/questions/276055/question-about-coroutines-and-waiting-for-a-functi.html – Shelby115
Bạn đang trộn mã đồng bộ và không đồng bộ. Có lẽ một hàm gọi lại sẽ hữu ích? Bạn có thể sử dụng đại diện 'Action', trong đó 'T' là bất kỳ kiểu nào bạn muốn" trả về ". –
rutter