Question

Comment puis-je quitter le script JavaScript comme beaucoup de exit PHP ou die? Je sais que ce n'est pas la meilleure pratique de programmation mais je dois.

Était-ce utile?

La solution

JavaScript équivalent de die de PHP. BTW il appelle simplement exit() (splattne merci):

function exit( status ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Brett Zamir (http://brettz9.blogspot.com)
    // +      input by: Paul
    // +   bugfixed by: Hyam Singer (http://www.impact-computing.com/)
    // +   improved by: Philip Peterson
    // +   bugfixed by: Brett Zamir (http://brettz9.blogspot.com)
    // %        note 1: Should be considered expirimental. Please comment on this function.
    // *     example 1: exit();
    // *     returns 1: null

    var i;

    if (typeof status === 'string') {
        alert(status);
    }

    window.addEventListener('error', function (e) {e.preventDefault();e.stopPropagation();}, false);

    var handlers = [
        'copy', 'cut', 'paste',
        'beforeunload', 'blur', 'change', 'click', 'contextmenu', 'dblclick', 'focus', 'keydown', 'keypress', 'keyup', 'mousedown', 'mousemove', 'mouseout', 'mouseover', 'mouseup', 'resize', 'scroll',
        'DOMNodeInserted', 'DOMNodeRemoved', 'DOMNodeRemovedFromDocument', 'DOMNodeInsertedIntoDocument', 'DOMAttrModified', 'DOMCharacterDataModified', 'DOMElementNameChanged', 'DOMAttributeNameChanged', 'DOMActivate', 'DOMFocusIn', 'DOMFocusOut', 'online', 'offline', 'textInput',
        'abort', 'close', 'dragdrop', 'load', 'paint', 'reset', 'select', 'submit', 'unload'
    ];

    function stopPropagation (e) {
        e.stopPropagation();
        // e.preventDefault(); // Stop for the form controls, etc., too?
    }
    for (i=0; i < handlers.length; i++) {
        window.addEventListener(handlers[i], function (e) {stopPropagation(e);}, true);
    }

    if (window.stop) {
        window.stop();
    }

    throw '';
}

Autres conseils

« sortie » fonctions quittent généralement le programme ou un script avec un message d'erreur comme paramete. Par exemple mourir (...) en php

die("sorry my fault, didn't mean to but now I am in byte nirvana")

L'équivalent de JS est de signaler une erreur avec le lancer mot-clé comme ceci:

throw new Error();

Vous pouvez facilement tester ceci:

var m = 100;
throw '';
var x = 100;

x
>>>undefined
m
>>>100

Même dans les programmes simples sans poignées, des événements et tels, il est préférable de mettre le code dans une fonction « principale », même si elle est la seule procédure:

<script> 
function main()
{
//code

}
main();
</script>

De cette façon, lorsque vous voulez arrêter le programme, vous pouvez utiliser « retour ».

Il y a plusieurs façons pour sortir un JS ou d'un script de noeud . Voici les plus pertinents:

// This will never exit!
setInterval((function() {  
    return;
}), 5000);

// This will exit after 5 seconds, with signal 1
setTimeout((function() {  
    return process.exit(1);
}), 5000);

// This will also exit after 5 seconds, and print its (killed) PID
setTimeout((function() {  
    return process.kill(process.pid);
}), 5000);

// This will also exit after 5 seconds and create a core dump.
setTimeout((function() {  
    return process.abort();
}), 5000);

Si vous êtes dans le REPL (par exemple après l'exécution node sur la ligne de commande), vous pouvez taper .exit pour quitter.

Si vous ne se soucient pas que c'est une erreur il suffit d'écrire:

fail;

qui arrêtera votre code principal (global) de procédure. Utile pour certains aspects de la mise au point / test.

Placez le mot-clé debugger; dans votre code JavaScript où vous voulez arrêter l'exécution. Ensuite, ouvrez votre outils de développement de votre navigateur préféré et recharger la page. Maintenant, il devrait faire une pause automatiquement. Ouvrez les Sources section de vos outils:. Le mot-clé debugger; est mise en surbrillance et vous avez la possibilité de reprendre l'exécution du script

J'espère que ça aide.

Plus d'informations sur:

Dans mon cas, j'ai utilisé le window.stop API qui est comme en cliquant sur le bouton X sur votre navigateur:

window.stop();

Cette réponse fournit des détails supplémentaires démontrant cadre qui aidera à résoudre cela et d'autres sortie précoce, les exceptions, le contrôle des processus et des besoins de traitement de la fonction séquentielle dans javascripts modulaires. Solution fournit des exemples de fermeture. Cette réponse suppose que l'individu souhaite d'autres scripts sur la page pour continuer à courir après le script en question a quitté.

Un exemple concret de solution simple ici: https://jsfiddle.net/alignedfibers/cpe1o1yy/66 /

<script>
    var safetyRun = (function(){
      var curExecution = null;
      var exceptionHandlers = {
        cleanup:function(){
          /*do exit cleanup*/
          console.log("Cleanup could set straglers to {}");
          return;
        }
      }
      var exitErr = function(errcode){
        curExecution.exNames.push("cleanup");
        throw new Error("EarlyExit");
      }
        var run = function(fun){
          curExecution = this;
          curExecution.exNames = [];
          fun(exitErr);
          for ( x in exNames){
            exceptionHandlers[x]();
          }
          return;
        }
        return run;
    })();
    var exitThisScript = function(exit){
      //write some modular code
      console.log("before exit");
      exit();
      console.log("after exit");
      return;
    }
    safetyRun(exitThisScript);
</script>

Au-dessus est un « CallRunner » qui fournit un moyen très simple pour sortir gratuitement juste en passant votre fonction au coureur.

Le nom de la variable dans le violon peut être source de confusion, la fonction nommée « fun » est le nom utilisé dans safetyRun pour référencer la fonction que nous essayons de sortir, et exitErr est le nom utilisé pour faire référence à la fonction que nous courons réellement complète La sortie. Aussi un peu déroutant est la suivante: une fois que la exitErr complète, le cadre de la pile est toujours pas sorti du fil de contrôle qui a appelé la fonction que nous avons quitté. Parce que nous avons encore fil de contrôle que nous pouvons utiliser des fonctions ou des codes d'erreur poussé à un tableau dans la fonction exitErr et les appeler itteratively avant de revenir pour permettre d'autres fonctions à exécuter. Cela nous permet de changer les poids ou apporter des corrections ou mis tout état nécessaire que nous pouvons utiliser pour alerter ce que les états de correction d'erreur ont besoin d'attention, envoyer un rapport de journal ou même le nettoyage complet difficile et fixer de manière autonome la fonction en arrière-plan et appelez itteratively exitErr jusqu'à ce qu'il effectue un retour au lieu d'un jet permettant ainsi la fonction que nous essayons de sortir tôt complète, (conseille de faire cette offmainthread). Cette « enveloppe / harnais » pourrait être une bonne façon de vérifier les versions des navigateurs et des trucs au début d'une fonction, vous pouvez même faire une importation statique ou dynamique ici si vous gérez vos propres bibliothèques ou ce que vous pouvez vraiment penser. Sortie est seule fonction fundemental qui peut être mis à la disposition de votre fonction en l'enveloppant comme celui-ci.

Le code du violon est un peu sale et pas jolies, les nouvelles constructions de ES6 peuvent faire ce plus joli. En outre, je recommande que vous appelez un générateur de harnais en haut de cette fonction et d'affecter son résultat à un var local pour la fonction que vous voulez sortir peut ressembler davantage le code ci-dessous. Afin de garder le contrôle de fil sans relâcher la pile, vous devrez toujours besoin d'avoir un harness.run (function (harnais) {/ MyVanillaFunc /}) pour envelopper votre fonction de vanille, sinon le ci-dessous en théorie devrait fonctionner. Emballage est exactement ce que je l'ai fait dans le code exitEarly ci-dessus.

var rockStarFunction = new function (){
var harness = reducePublicStrapOnFromCache()._url(location);
return function(){ /*wrapper would wrap these internals*/
        harness.scriptContextChangeEvent();
        harness.imInteligentFunction("{slib_err-15346 : 'Cannot handle request, ::suggest(mesh//abc) exit back to pool'}");
        harness.exit();
        console.log("You should never get this far");
        return true;
    };
}

La solution que j'ai fourni ici est celui que je recommande si votre intention est de construire un conteneur runner javascript avec des fonctionnalités telles que la sortie, affirmer, maquette et tel construit. Je pense que cela est la meilleure façon de construire ce containership et faire mes fonctions transmissibles.

Si vous êtes à la recherche d'un moyen de mettre fin à force l'exécution de tous Javascript sur une page, je ne suis pas sûr qu'il ya une façon de le faire officiellement sanctionné - il semble que le genre de chose qui pourrait être un risque pour la sécurité (bien que pour être honnête, je ne peux pas penser à la façon dont il serait le dessus de ma tête). Normalement, en Javascript lorsque vous voulez que votre code pour arrêter l'exécution, vous return seulement de quelque fonction est l'exécution. (L'instruction return est facultative si elle est la dernière chose dans la fonction et la fonction ne doit pas retourner une valeur) S'il y a une raison de revenir est pas assez bon pour vous, vous devriez probablement modifier plus en détail dans la question de savoir pourquoi vous pensez que vous avez besoin et peut-être que quelqu'un peut offrir une solution de rechange.

Notez que dans la pratique, les interprètes Javascript de la plupart des navigateurs simplement cesser d'exécuter le script en cours si elles rencontrent une erreur. Ainsi, vous pouvez faire quelque chose comme l'accès à un attribut d'une variable unset:

function exit() {
    p.blah();
}

et il probablement abandonner le script. Mais vous ne devriez pas compter sur cela parce qu'il est pas du tout standard, et il semble vraiment une terrible pratique.

EDIT : OK, peut-être ce ne fut pas une bonne réponse à la lumière des Ólafur de. Bien que la fonction die() il met en œuvre liée à fond mon deuxième paragraphe, à savoir qu'il jette juste une erreur.

Mise à jour: Cela fonctionne aussi longtemps que vous ne catch pas

throw window.location.assign('dead.html');

Cette petite fonction est assez proche de mimer la sortie de PHP (). Comme avec les autres solutions, ne pas ajouter quoi que ce soit d'autre.

function exit(Msg)
    {
    Msg=Msg?'*** '+Msg:'';
    if (Msg) alert(Msg);
    throw new Error();
    } // exit

Il suffit de créer une condition booléenne, pas besoin de code compliqué ici ..

Si même une fois que vous tournez à vrai / ou plusieurs fois, il vous donnera à la fois une ligne de solution / non multiple - essentiellement simple que cela.

throw "";

est un abus du concept, mais probablement la seule option. Et, oui, vous devrez réinitialiser tous les écouteurs d'événements, comme la réponse acceptée mentionne. Vous aurez également besoin d'un seul point d'entrée si je ne me trompe pas.

En haut de celui-ci: Vous voulez une page qui vous signale par email dès qu'il lance - vous pouvez utiliser par exemple Raven / Sentry pour cela. Mais cela signifie, vous vous produire des faux positifs. Dans ce cas, vous devez également mettre à jour le gestionnaire par défaut pour filtrer ces événements sur ou définir de tels événements sur le tableau de bord ne pas tenir compte de Sentry.

window.stop ();

Cela ne fonctionne pas pendant le chargement de la page. Il arrête le décodage de la page ainsi. Donc, vous ne pouvez pas vraiment utiliser pour offrir utilisateur une variante sans javascript de votre page.

debugger;

Arrête l'exécution uniquement avec le débogueur ouvert. Fonctionne très bien, mais pas livrable.

Je pense que cette question a été répondue, cliquez sur ici Plus d'information. Voici la réponse courte, il est affiché.

throw new Error("Stop script");

Vous pouvez également utiliser votre navigateur pour ajouter des points de rupture, chaque navigateur est similaire, consultez des informations ci-dessous pour votre navigateur.

Pour info points de rupture Chrome cliquez
Pour info points de rupture Firefox cliquez
Pour les points de rupture cliquez sur
Pour les points de break Safari d'info cliquez sur

Si vous utilisez une fonction non définie dans le script puis script arrêter en raison de « ReferenceError Uncaught ». J'ai essayé en suivant le code et les deux premières lignes exécutées.

Je pense que, c'est la meilleure façon d'arrêter le script. S'il y a une autre façon alors s'il vous plaît me commenter. Je veux aussi connaître une autre façon meilleure et simple. BTW, je n'ai pas sortie ou mourir fonction en Javascript intégré comme PHP pour terminer le script. Si quelqu'un sait alors s'il vous plaît laissez-moi savoir.

alert('Hello');

document.write('Hello User!!!');

die();  //Uncaught ReferenceError: die is not defined

alert('bye');

document.write('Bye User!!!');

Ceci est un exemple, que, si une condition existe, puis terminer le script. Je l'utilise dans mon javascript côté client SSE, si le

<script src="sse-clint.js" host="https://sse.host" query='["q1,"q2"]' ></script>

être analysé droit canot de JSON Parse ...

if( ! SSE_HOST  ) throw new Error(['[!] SSE.js: ERR_NOHOST - finished !']);

... de toute façon l'idée générale est la suivante:

if( error==true) throw new Error([ 'You have This error' ,  'At this file', 'At this line'  ]);

mettra fin / die votre script Javasript

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top