window.onbeforeunload = function() { if (document.getElementById("parentpan").style.display == "block") { return "You are logged out."; Logout(); } }; I want the logout() function to be called after the return statement, is it possible?
12 Réponses :
Vous ne pouvez rien exécuter après une déclaration de retour. P>
EDIT: L'instruction (C'est un bon exemple pour une question XY: vous posez des questions à propos de Y tout en nous disant pour ce que vous avez en réellement besoin). P> enfin code> permet l'exécution du code après un
retour code> à des fins de nettoyage. P>
@Femaref: En fait, il y a. ( enfin code>)
@Femarf vous voudrez peut-être clarifier; À l'aide de la minuterie, des gestionnaires d'événements, etc., vous permet de mettre du code dans une fonction qui sera exécutée chronologiquement une fois la fonction renvoyée.
@Stuart: C'est quelque chose de différent de ce que j'ai écrit - j'ai écrit explicitement "après une déclaration de retour B>". Tout ce que vous avez spécifié sont des effets secondaires d'une fonction et n'ont aucune incidence sur la déclaration de retour elle-même.
La déclaration de retour termine une fonction, vous ne pouvez pas exécuter de code après cela. Vous pouvez le faire:
ret = "You are logged out."; Logout(); return ret;
En général, si vous voulez que quelque chose soit exécuté après le retour de la fonction, vous pouvez définir une minuterie: Toutefois, comme indiqué dans les commentaires, ce n'est pas une bonne idée de Onbeforeunload , comme l'événement de la minuterie ne sera pas tiré si la page a fini de décharger en premier. p> p>
La plupart des navigateurs de jour modernes vont tuer le délai d'attente et l'ignorera lorsque la page se charge. Fondamentalement une condition de race.
@epascarello - Vous voulez dire "... lorsque la page décharge i>", non? Et, oui, les minuteries ne peuvent pas être invoquées au feu dans le cadre du déchargement de la page.
Je suppose que la déconnexion est un processus à forte intensité de temps et que vous souhaitez fournir des commentaires à l'utilisateur avant de l'exécuter:
setTimeout(Logout,1); return "You are logged out.";
Retour signifie que vous retournez de l'exécution de la fonction appelée.Lors que l'instruction de retour est exécutée, le système comprend que l'exécution de la fonction est terminée et qu'elle bascule sur le programme principal à partir de laquelle la fonction est appelée. P>
Dans le programme, vous pouvez voir une déclaration après le retour. Mais le système ne vérifie pas cela même. P>
Ce dont vous avez besoin est d'exécuter Cette méthode appuie un appel de fonction sur la boucle d'événement immédiatement (après puisque le premier Quel est l'inconvénient? Étant donné que la fonction est bloquée sur la boucle d'événement, il peut ne jamais avoir la possibilité d'exécuter (par conséquent, l'utilisateur ne se déconnectera jamais). Une telle situation bonne nouvelle pour vous cependant, cela se produit sur une occasion Bonne année. Bravo! P> P> déconnexion code> asynchrone. Cela peut être facilement accessible en JavaScript à l'aide de la fonction
Settimeout code> car d'autres ont dit. Voici une méthode que j'utilise couramment pour appeler des fonctions asynchroniquement:
0 code> ms). Par conséquent, la fonction est exécutée après la fin du code actuel (lequel vous êtes après votre retour). Voici un exemple simple de la façon de l'utiliser: p>
alerte code> est appelé asynchrone, il exécutera après le deuxième appel à
alerte code>. Aussi simple que l'appel de votre fonction avec
async code>. C'est ce que vous feriez dans votre cas: p>
settimeout code> comme tout le monde vous plaisante et vous ferez très bien. Personnellement, je pense que vous devez vous déconnecter avant de retourner un message que
"Vous êtes déconnecté." Code>, mais c'est votre application. P>
La plupart des autres interrogateurs manquent ce que vous essayez de faire ici. Vous voulez Ce que vous devriez faire est de le connecter sur Onunload pour faire l'action. P> window.onbeforeunload code> pour agir comme
fenêtre.confirm () code>. Il n'y a aucun moyen d'agir sur l'action OK dans l'événement ONBEFOREUnloAlload.
window.onbeforeunload = function () {
return "Your session will be logged out"
};
window.onunload = function () {
logout();
}
Merci@shmiddty pour la réparation de cela, je ne pense pas que mon café du matin n'a toujours pas été lancé. :)
Si vous avez JQuery dans votre projet, vous pouvez utiliser un mécanisme différé. Vous pouvez retourner un objet de promesse pour des tâches en cours comme ceci:
Vous pouvez utiliser settimeout code> pour y parvenir. Votre code doit être aussi ci-dessous
window.onbeforeunload = function() {
if (document.getElementById("parentpan").style.display == "block") {
setTimeout(function(){
Logout();
}, 0);
return "You are logged out.";
}
};
Le meilleur moyen possible et la manière la plus efficace est attrape est facultatif dans cette p>
blockquote> https://youtu.be/is_o_l-zis8 Ceci est utile pour vous p> p> essayer, attraper et enfin code> stry>
var a = 10; function b(){ a = 25; return; function a(){} } b(); document.write(a); try it
J'ai trouvé deux façons d'aborder cela. Le premier est comme indiqué ci-dessus par BHavsar Japan
essayer, attraper et enfin code> h2> p>
const example2 = () => {
Promise.resolve()
.then(() => console.log('will execute after return'));
return 'will execute first'
}
const main = () => {
const message = example2();
console.log(message);
}
main();
Pourquoi avez-vous besoin d'eux dans cet ordre?
Techniquement retourner
"Vous êtes déconnecté." Code> Avant de connecter quelqu'un out est couché :)
Vous retournez "Vous êtes déconnecté." à un utilisateur avec une invite OK / Annuler? Onbeforeunload ne joue pas comme
window.confirm () code>