8
votes

Exécuter la déclaration après la déclaration de retour dans JavaScript

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?

3 commentaires

Pourquoi avez-vous besoin d'eux dans cet ordre?


Techniquement retourner "Vous êtes déconnecté." 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 ()


12 Réponses :


12
votes

Vous ne pouvez rien exécuter après une déclaration de retour.

EDIT: L'instruction enfin permet l'exécution du code après un retour à des fins de nettoyage.

(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).


3 commentaires

@Femaref: En fait, il y a. ( enfin )


@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 ". 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.



7
votes

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;


0 commentaires

1
votes

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: xxx

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.


2 commentaires

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 ", non? Et, oui, les minuteries ne peuvent pas être invoquées au feu dans le cadre du déchargement de la page.



-1
votes

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.";


0 commentaires

0
votes

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.

Dans le programme, vous pouvez voir une déclaration après le retour. Mais le système ne vérifie pas cela même.


0 commentaires

6
votes

Ce dont vous avez besoin est d'exécuter déconnexion asynchrone. Cela peut être facilement accessible en JavaScript à l'aide de la fonction Settimeout car d'autres ont dit. Voici une méthode que j'utilise couramment pour appeler des fonctions asynchroniquement: xxx

Cette méthode appuie un appel de fonction sur la boucle d'événement immédiatement (après 0 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: xxx

puisque le premier alerte est appelé asynchrone, il exécutera après le deuxième appel à alerte . Aussi simple que l'appel de votre fonction avec async . C'est ce que vous feriez dans votre cas: xxx

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 peut surgir. Il se produit généralement lorsque le contrôle passe dans une boucle infinie ou se bloque à cause d'une demande d'ajax bloquante.

bonne nouvelle pour vous cependant, cela se produit sur une occasion très . Alors ne t'inquiète pas pour ça. Il suffit d'utiliser settimeout 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é." , mais c'est votre application.

Bonne année. Bravo!


0 commentaires

1
votes

La plupart des autres interrogateurs manquent ce que vous essayez de faire ici. Vous voulez 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.

Ce que vous devriez faire est de le connecter sur Onunload pour faire l'action. P>

window.onbeforeunload = function () { 
    return "Your session will be logged out" 
};
window.onunload = function () { 
    logout(); 
}


1 commentaires

Merci@shmiddty pour la réparation de cela, je ne pense pas que mon café du matin n'a toujours pas été lancé. :)



0
votes

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: xxx

Démo


0 commentaires

0
votes

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.";
    }
};


0 commentaires


0
votes
    var a = 10;
function b(){
    a = 25;
  return;
    function a(){}
}
b();
document.write(a);
try it

0 commentaires

0
votes

J'ai trouvé deux façons d'aborder cela. Le premier est comme indiqué ci-dessus par BHavsar Japan

1. Exemple avec 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();


0 commentaires