Maison >interface Web >js tutoriel >Comment gérer les valeurs de retour asynchrones en JavaScript avec jQuery ?
Valeurs de retour asynchrones en JavaScript avec jQuery
En tentant de récupérer et d'attribuer une valeur GUID de manière asynchrone à l'aide de jQuery, les développeurs rencontrent souvent le problème où une alerte affiche la valeur avec succès mais la valeur reste indéfinie lorsque vous essayez de la renvoyer et de l'attribuer à une variable.
Cela se produit en raison de la nature des appels asynchrones. Lorsque la fonction elqTracker.pageTrack() est appelée, elle revient immédiatement, avant même que la fonction getGUID() ait fini de s'exécuter. Cela entraîne la définition de returnValue sur undefined.
Pour résoudre cette limitation, jQuery fournit l'objet $.Deferred. En renvoyant une promesse de trackPage(), nous pouvons y attacher des rappels pour gérer les résultats asynchrones.
<code class="javascript">function trackPage() { var elqTracker = new jQuery.elq(459), dfd = $.Deferred(); elqTracker.pageTrack({ success: function () { elqTracker.getGUID(function (guid) { dfd.resolve(guid); }); } }); return dfd.promise(); }</code>
En attachant des rappels à la promesse renvoyée par trackPage(), nous pouvons désormais accéder à la valeur GUID lorsque elle devient disponible.
<code class="javascript">trackPage().done(function (guid) { alert("Got GUID:" + guid); });</code>
De plus, les promesses permettent d'enchaîner plusieurs rappels, offrant ainsi un moyen flexible de gérer les opérations asynchrones.
<code class="javascript">var pageHit = trackPage().done(function (guid) { alert("Page Hit GUID:" + guid); }); $("button").click(function () { pageHit.done(function (guid) { alert("Clicked on Page GUID:" + guid); }); });</code>
Cette approche garantit que la valeur renvoyée est gérée de manière asynchrone, permettant une affectation et un accès appropriés lors des opérations ultérieures.
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!