Comment tuer une fonction javascript?
exemple de code:
var isExecutionOver = false,
myFunction = function() {
//does some asynchronous stuff and sets isExecutionOver to true
//when the asynchronous job is over.
};
myFunction();
//Kill myFunction if it takes more than 3 seconds
setTimeout(function() {
if(!isExecutionOver) {
//How do I kill myFunction?
}
}, 3*1000);
Dans l'extrait ci-dessus, je suis en train de la tuer (ou en d'autres termes, arrêter l'exécution d') myFunction
si elle n'est pas capable de faire son travail de temps donné (3 secondes dans ce cas).
PS: Veuillez supposer que je n'ai pas de contrôle sur myFunction définition. Le seul endroit où je peux travailler est à l'intérieur de setTimeout
.
Dépend. Ce asynchrone des choses qui se passe? Si c'est une demande XHR, vous pouvez
Je ne sais pas où vous êtes allé, mais il n'y a pas assez d'informations pour répondre précisément à votre question.
.abort()
. Pour être clair, myFunction
aura quitté longtemps avant l'async truc est fait. Ce que vous souhaitez annuler est ce que l'attente d'opération asynchrone qui a été commencé par myFunction
, pas myFunction
lui-même.Je ne sais pas où vous êtes allé, mais il n'y a pas assez d'informations pour répondre précisément à votre question.
OriginalL'auteur Goje87 | 2013-06-05
Vous devez vous connecter pour publier un commentaire.
Vous avez une question compliquée:
Vous ne pouvez pas tuer un fonctionnement de fonction. Parfois il est possible de définir un indicateur qu'il peut le remarquer quand il décide de vérifier. Il pourrait arrêter de faire ce qu'il fait et de retour.
Mais rappelez-vous que JavaScript est un single-threaded langue. Lorsque le code de cette fonction est en cours d'exécution, il existe peu de moyens pour tout autre code pour définir ce drapeau.
Exemple 1: Il semble que je me souviens de quelque chose à propos de la façon dont certains navigateurs, par exemple, permettra à certains événements être exécuté à partir de la file d'attente des événements lorsqu'une boîte d'alerte s'affiche. Ces événements pourraient mettre le drapeau.
Exemple 2: une Autre possibilité est que le code de la fonction n'est pas techniquement dans la fonction, mais la fonction démarre un compteur d'intervalles qui fait le travail. Tout autre code pourrait définir l'indicateur et le code à exécuter à intervalles pu vérifier le drapeau et s'arrêter.
Vous pouvez arrêter un
setTimeout()
événement qui est en attente pour le temps à plus de. (Il y a une manière similaire à arrêter unsetInterval()
événement répété.Vous pouvez arrêter une requête ajax qui est en attente de la réponse. (Remarque: Un objet XHR est également retourné à partir de javascript et ajax appel.) Notez que la demande est déjà allé au serveur et ce juste dit de l'ignorer à l'avenir toute réponse à la demande.
while
est en cours d'exécution, si aucun autre code sera jamais en mesure de définir laabortWork
variable.Bon point, mais pas à 100% applicables. Tout d'abord, utilisez votre imagination. Apparaissent comme une boucle pour plus de clarté, mais c'est de l'aléatoire des morceaux de code et pourrait inclure quoi que ce soit. Je vais ajouter un peu de assurez-vous que votre point de vue se reflète, cependant.
Je serais curieux de savoir ce que l'événement est autorisé à invoquer son maître, indépendamment de blocage de code. Je n'ai jamais entendu parler de ça avant.
Trouvé. Un exemple a été une fenêtre de navigateur redimensionner causé par quelque chose en dehors du navigateur qui s'est passé pendant un dispositif d'alerte et il a causé la redimensionner gestionnaire d'exécuter. stackoverflow.com/questions/2734025/...
Heh, navigateur caprices de plaisir!
OriginalL'auteur Lee Meador