Valeurs de retour des coroutines dans Unity
Dans le développement de jeux utilisant Unity, les coroutines sont couramment utilisées pour effectuer des tâches asynchrones, telles que l'envoi de requêtes HTTP . Cependant, récupérer les résultats d'une coroutine une fois celle-ci terminée peut s'avérer difficile.
Considérez l'extrait de code suivant, dans lequel une coroutine est utilisée pour exécuter une requête POST et mettre à jour une variable, success_fail :
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; }
Le problème ici est que l'instruction return s'exécute avant la fin de la coroutine, ce qui entraîne le retour d'une valeur incorrecte. Pour résoudre ce problème, nous pouvons utiliser l'approche suivante :
Utiliser des actions
Au lieu de renvoyer une valeur directement à partir de la fonction, nous pouvons utiliser une action
public void POST(string username, string passw, Action<int> callback) { WWWForm form = new WWWForm(); form.AddField("usr", username); form.AddField("pass", passw); WWW www = new WWW(url, form); StartCoroutine(WaitForRequest(www, callback)); }
Dans la coroutine, nous définissons la variable success_fail et invoquons le rappel avec sa valeur :
private IEnumerator WaitForRequest(WWW www, Action<int> callback) { yield return www; if (www.error == null) { if(www.text.Contains("user exists")) { success_fail = 2; } else { success_fail=1; } } else { success_fail=0; } callback(success_fail); }
Vous pouvez appeler la fonction POST depuis n'importe quel script et fournissez un rappel pour gérer le résultat :
this.POST("user1", "password", (result) => { print("Result: " + result); });
Cette approche vous permet de récupérer la valeur de la coroutine une fois celle-ci terminée, même si la fonction est déjà revenue.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!