Cette fonction ci-dessous ne fonctionne pas comme je le souhaite; étant un novice JS, je ne peux pas comprendre pourquoi.
J'en ai besoin pour attendre 5 secondes avant de vérifier si newState
c'est le cas -1
.
Actuellement, il n'attend pas, il vérifie tout de suite.
function stateChange(newState) {
setTimeout('', 5000);
if(newState == -1) {
alert('VIDEO HAS STOPPED');
}
}
javascript
dom-events
flocon
la source
la source
Réponses:
Vous devez mettre votre code dans la fonction de rappel que vous fournissez à
setTimeout
:Tout autre code s'exécutera immédiatement.
la source
Vous ne devriez vraiment pas faire cela , l'utilisation correcte du délai d'attente est le bon outil pour le problème de l'OP et toute autre occasion où vous voulez simplement exécuter quelque chose après un certain temps. Joseph Silber l'a bien démontré dans sa réponse. Cependant, si dans certains cas non liés à la production, vous voulez vraiment suspendre le thread principal pendant un certain temps, cela le fera.
Avec exécution sous la forme:
Je suis arrivé ici parce que je construisais un cas de test simple pour séquencer un mélange d'opérations asynchrones autour d'opérations de blocage de longue durée (c'est-à-dire une manipulation DOM coûteuse) et c'est mon opération de blocage simulée. Cela convient parfaitement à ce travail, j'ai donc pensé le publier pour toute autre personne qui arrive ici avec un cas d'utilisation similaire. Même ainsi, cela crée un objet Date () dans une boucle while, ce qui pourrait submerger le GC s'il fonctionne suffisamment longtemps. Mais je ne saurais trop insister, cela ne convient que pour les tests, pour construire une fonctionnalité réelle, vous devriez vous référer à la réponse de Joseph Silber.
la source
Voici une solution utilisant la nouvelle syntaxe async / wait .
Assurez-vous de vérifier la prise en charge du navigateur car il s'agit d'une nouvelle fonctionnalité introduite avec ECMAScript 6.
Fonction d'utilité:
Usage:
L'avantage de cette approche est qu'elle donne à votre code l'apparence et le comportement d'un code synchrone.
la source
Utilisez une fonction de retard comme celle-ci:
Usage:
Crédits: comment retarder le gestionnaire .keyup () jusqu'à ce que l'utilisateur arrête de taper?
la source
Vous ne devriez pas simplement essayer de faire une pause de 5 secondes en javascript. Cela ne fonctionne pas de cette façon. Vous pouvez planifier une fonction de code pour qu'elle s'exécute dans 5 secondes à partir de maintenant, mais vous devez mettre le code que vous souhaitez exécuter ultérieurement dans une fonction et le reste de votre code après cette fonction continuera à s'exécuter immédiatement.
Par exemple:
Mais, si vous avez un code comme celui-ci:
L'
console.log()
instruction s'exécutera immédiatement. Il n'attendra pas jusqu'à ce que la temporisation se déclenche dans lastateChange()
fonction. Vous ne pouvez pas simplement suspendre l'exécution de javascript pendant une durée prédéterminée.Au lieu de cela, tout code que vous voulez exécuter des retards doit être à l' intérieur de la
setTimeout()
fonction de rappel (ou appelé de cette fonction).Si vous avez essayé de "mettre en pause" en boucle, alors vous "suspendriez" essentiellement l'interpréteur Javascript pendant un certain temps. Parce que Javascript exécute votre code dans un seul thread, lorsque vous bouclez, rien d'autre ne peut s'exécuter (aucun autre gestionnaire d'événements ne peut être appelé). Ainsi, le bouclage en attente de modification d'une variable ne fonctionnera jamais car aucun autre code ne peut s'exécuter pour modifier cette variable.
la source
var t = new Date().getTime(); while (new Date().getTime() < t + millisecondsToLockupBrowser);
Si vous êtes dans une fonction asynchrone, vous pouvez simplement le faire en une seule ligne:
Remarquez , si la cible est NodeJS, il sera plus efficace de l'utiliser (c'est une fonction setTimeout prédéfinie promise):
la source
Essaye ça:
la source
Meilleur moyen de créer une fonction comme celle-ci pour attendre en milli secondes, cette fonction attendra les millisecondes fournies dans l'argument:
la source
Sur la base de la réponse de Joseph Silber , je le ferais comme ça, un peu plus générique.
Vous auriez votre fonction (créons-en une en fonction de la question):
Et vous pourriez avoir une fonction d'attente:
À la fin, vous auriez:
C'est une solution, je préfère ne pas utiliser d'arguments dans la fonction d'attente (pour n'en avoir qu'au
foo();
lieu defoo(arg);
) mais c'est pour l'exemple.la source
Cette solution provient de la documentation de React Native pour un contrôle de rafraîchissement :
Pour appliquer cela à la question du PO, vous pouvez utiliser cette fonction en coordination avec
await
:la source
Vous pouvez ajouter du retard en apportant de petites modifications à votre fonction (asynchronisation et attente).
la source
en utilisant angularjs:
la source
Créer une nouvelle fonction Js
Appelez la fonction lorsque vous souhaitez retarder l'exécution. Utilisez des millisecondes dans int pour la valeur de retard.
la source
Je l'ai utilisé pour exécuter des jeux PC depuis Edge ou IE. Et il ferme automatiquement IE Edge après 7 secondes.
Firefox et Google Chrome ne peuvent pas être utilisés pour démarrer des jeux de cette façon.
la source