Comment terminer le script en Javascript

j'ai besoin d'un code qui sortira du script js un peu comme PHP 'exit' ou 'die'. (Je sais que ce n'est pas la meilleure pratique de programmation, mais j'en ai besoin).

101
demandé sur Damjan Pavlica 2009-02-15 12:14:49

11 réponses

équivalent JavaScript pour PHP die . BTW, il appelle juste exit() (grâce splattne):

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 '';
}
65
répondu Ólafur Waage 2014-07-03 01:56:30

"exit" les fonctions généralement de quitter le programme ou le script avec un message d'erreur comme paramete. Par exemple die(...) en php

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

l'équivalent dans JS est de signaler une erreur avec le jeter mot-clé comme ceci:

throw new Error();

vous pouvez facilement tester ceci:

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

x
>>>undefined
m
>>>100
50
répondu Lorenz Lo Sauer 2011-08-28 19:22:43

même dans les programmes simples sans poignées, événements et Tels, il est préférable de mettre le code dans une fonction "principale", même si c'est la seule procédure:

<script> 
function main()
{
//code

}
main();
</script>

Ainsi, lorsque vous voulez arrêter le programme, vous pouvez utiliser"return".

36
répondu Jhep 2011-09-28 14:12:26

Il y a bien des égards, pour sortir de la JS ou le Nœud de script. 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 la REPL (c.-à-d. après avoir lancé node sur la ligne de commande), vous pouvez taper .exit pour quitter.

5
répondu not2qubit 2018-07-18 06:56:21

si vous ne vous souciez pas que ce soit une erreur, écrivez simplement:

fail;

qui empêchera votre code principal (global) de continuer. Utile pour certains aspects du débogage/test.

4
répondu Marc 2017-09-19 18:51:07

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

j'espère que ça aidera.

plus d'informations à:

2
répondu rbelow 2018-07-01 18:13:50

cette réponse fournit des détails démontrant le cadre supplémentaire qui aidera à résoudre cette et d'autres sorties précoces, les exceptions, le contrôle de processus, et les besoins séquentiels de manipulation de fonction dans les JavaScripts modulaires. Solution fournit des exemples de fermeture. Cette réponse suppose que la personne souhaite que d'Autres scripts de la page continuent à tourner après que le script en question est sorti.

exemple en direct de solution simple ici: https://codepen.io/corpus_khu/pen/VpMQzO

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

ci-dessus est un moyen très simple de sortir. Avant d'envoyer votre fonction à ce "Runner" je recommande d'envelopper votre fonction dans un harnais de test en enveloppant dans un objet qui charge un harnais et peut être exécuté, le harnais de test devrait exposer des méthodes comme exit() à votre fonction afin qu'ils ne doivent pas être passés.

les exemples de tout ce dont vous avez besoin pour construire une bonne stratégie de sortie sont disponible sur github ici (fichier: pseudo_threads2.js): https://github.com/fromSpace/js-recursionwithevents-practice

version de démonstration en direct ici: https://fromspace.github.io/js-recursionwithevents-practice /

Avis pseudo_threads2.js que la fonction simConstantMomentum () renvoie une fonction qui a une portée lexicale vars avec toutes les fonctions de harnais. Au lieu de cela je vous recommande d'appeler un harnais générateur en haut de cette fonction et assignez son résultat à un var local de sorte que la fonction que vous voulez sortir ressemble plus à cela quand vous avez terminé.

var rockStarFunction = new function (){
var harness = reducePublicStrapOnFromCache()._url(location);
return function(){
        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 fournie ici est celle que je recommande si votre intention est de construire un conteneur JAVASCRIPT runner avec des capacités telles que exit, assert, mock et le tel intégré. Je pense que c'est la meilleure façon de construire ce containership et de rendre mes fonctions transmissible. -- corpus_khu

1
répondu alignedFiberS 2017-04-14 08:29:59

si vous cherchez un moyen de mettre fin à l'exécution forcée de tout Javascript sur une page, je ne suis pas sûr qu'il y ait une façon officiellement autorisée de le faire - il semble que le genre de chose qui pourrait être un risque de sécurité (bien que pour être honnête, je ne peux pas penser à la façon dont il serait au-dessus de ma tête). Normalement dans Javascript quand vous voulez que votre code cesse d'être exécuté, vous n'avez qu'à return de n'importe quelle fonction exécutée. (L'instruction return est optionnelle si c'est la dernière chose dans la fonction et la fonction ne devrait pas retourner une valeur) S'il y a une raison pour laquelle retourner n'est pas assez bon pour vous, vous devriez probablement éditer plus de détails dans la question de savoir pourquoi vous pensez que vous en avez besoin et peut-être quelqu'un peut offrir une solution de rechange.

notez que dans la pratique, les interpréteurs Javascript de la plupart des navigateurs arrêteront simplement d'exécuter le script courant s'ils rencontrent une erreur. Donc vous pouvez faire quelque chose comme accéder à un attribut d'une variable non activée:

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

et il sera probablement annuler le script. Mais vous ne devriez pas compter là-dessus parce que ce n'est pas du tout standard, et ça semble vraiment être une pratique terrible.

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

0
répondu David Z 2009-02-15 09:42:04

Dans mon cas, j'ai utilisé la Fenêtre.arrêtez L'API qui est comme cliquer sur le bouton X sur votre navigateur:

voir: https://developer.mozilla.org/en/docs/Web/API/Window/stop

0
répondu Musa 2017-08-22 02:54:34

mise à jour: cela fonctionne aussi longtemps que vous ne catch it!

throw window.location.assign('dead.html');
0
répondu Dylan Sharhon 2018-05-20 04:31:25

ceci est un exemple, que, si une condition existe, alors résilier le script. Je l'utilise dans mon SSE javascript côté client, si le

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

ne peut pas être analysé à droite de JSON parse ...

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

... quoi qu'il en soit l'idée générale est:

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

cela va mettre fin, de mourir votre javasript script

-1
répondu kapad 2017-10-13 21:28:50