HTTP-запрос Unity WebGL без IEnumerator или сопрограммы
Как видно из названия, я пытаюсь сделать HTTP-запрос в Unity (WebGL).
В документации, которую я нашел здесь: Сеть WebGL они говорят мне, чтобы создать IEnumerator
наберите функцию и вызовите ее через StartCoroutine
вызов.
Это все хорошо, моя проблема в том, что мне нужно предоставить обратный звонок HttpRequest
в класс, который находится в другой библиотеке.
Мой обратный вызов выглядит так:
private string HttpRequest(string url, string method, string body=null) {
WWW www = null; // = null is compiler candy
if (method == "GET") {
www = new WWW(url);
} else if (method == "POST") {
//POST specific implementation...
} else {
// do something else
}
while (!www.isDone) { } // this is Wrong.
return www.text;
}
Проблема в том, что если я не вернусь из HttpRequest
и вызывающий метод JavaScript не сможет обработать запрос. Но с другой стороны вызывающий метод ожидает string
не какой-то IEnumerator
,
Есть ли обходной путь, позволяющий JavaScript выполнять свою работу после создания класса WWW?
1 ответ
Нет
WWW
а также UnityWebRequest
являются асинхронными.
Чтобы сделать синхронный запрос, вам нужно написать плагин javascript. Использование некоторой библиотеки не очень сложно, например, jquery.
function getdata($url, $method, $data)
{
var text = '';
$.ajax({
url: $url,
type: $method,
async: false, //synchronous request
data: $data,
success: function(data){
text = data;
},
error: function(data){
text = data;
}
});
return text;
}
Дополнительная информация: