web-dev-qa-db-de.com

So beenden Sie das Skript in Javascript

Ich brauche einen Code, der das js-Skript wie PHP 'exit' oder 'die' (...) beenden wird.

109
Nir

JavaScript-Äquivalent für die von PHP. Übrigens ruft es einfach exit() (danke splattne) auf:

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 '';
}
69
Ólafur Waage

"exit" -Funktionen beenden das Programm oder Skript normalerweise zusammen mit einer Fehlermeldung als Parameter. Zum Beispiel sterben (...) in php 

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

Das Äquivalent in JS ist das Anzeigen eines Fehlers mit dem Schlüsselwort throw wie folgt:

throw new Error();

Sie können dies einfach testen:

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

x
>>>undefined
m
>>>100
55
Lorenz Lo Sauer

Selbst in einfachen Programmen ohne Handles, Ereignisse und dergleichen ist es am besten, Code in eine "main" -Funktion zu setzen, auch wenn dies die einzige Prozedur ist:

<script> 
function main()
{
//code

}
main();
</script>

Auf diese Weise können Sie, wenn Sie das Programm anhalten möchten, "return" verwenden.

40
Jhep

Es gibt viele Möglichkeiten , um ein JS- oder Node-Skript zu beenden. Hier sind die relevantesten:

// 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);

Wenn Sie sich in REPL befinden (d. H. Nachdem Sie node in der Befehlszeile ausgeführt haben), können Sie zum Beenden .exit eingeben.

8
not2qubit

Wenn es Ihnen egal ist, dass es ein Fehler ist, schreiben Sie einfach:

fail;

Dadurch wird verhindert, dass Ihr (globaler) Hauptcode fortgesetzt wird. Nützlich für einige Aspekte des Debugging/Testing.

4
Marc

Platzieren Sie das Schlüsselwort debugger; in Ihrem JavaScript-Code an der Stelle, an der Sie die Ausführung stoppen möchten. Öffnen Sie dann die Entwicklertools Ihres Lieblingsbrowsers und laden Sie die Seite erneut. Jetzt sollte es automatisch angehalten werden. Öffnen Sie den Abschnitt Sources Ihrer Tools: Das Schlüsselwort debugger; ist markiert und Sie haben die Möglichkeit, die Skriptausführung wieder aufzunehmen.

Ich hoffe, es hilft.

Weitere Informationen unter:

2
rbelow

Diese Antwort enthält Details, die ein zusätzliches Framework demonstrieren, das dazu beiträgt, dieses und andere frühzeitige Beendigungs-, Ausnahmen-, Prozesssteuerungs- und sequenzielle Funktionsanforderungen in modularen Javascripts zu lösen. Lösung bietet Verschlussbeispiele. Bei dieser Antwort wird davon ausgegangen, dass die Person möchte, dass die anderen Skripts auf der Seite weiter ausgeführt werden, nachdem das betreffende Skript beendet wurde. 

Live-Beispiel für eine einfache Lösung hier: 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>

Oben ist ein sehr einfacher Weg, um zu beenden. Bevor Sie Ihre Funktion an diesen "Runner" senden, empfehle ich Ihnen, Ihre Funktion in einem Test-Kabelbaum zu verpacken, indem Sie ein Objekt einwickeln, das einen Kabelbaum lädt und ausgeführt werden kann. Der Test-Kabelbaum sollte Methoden wie exit () für Ihre Funktion verfügbar machen, damit diese nicht vorhanden sind bestanden werden 

Beispiele für alles, was Sie zum Erstellen einer guten Exit-Strategie benötigen, finden Sie auf github (Datei: pseudo_threads2.js): https://github.com/fromSpace/js-recursionwithevents-practice

Live-Demo-Version hier: https://fromspace.github.io/js-recursionwithevents-practice/

Beachten Sie in pseudo_threads2.js, dass die Funktion simConstantMomentum () eine Funktion zurückgibt, die über einen lexikalischen Gültigkeitsbereich mit allen Harness-Funktionen verfügt. Stattdessen empfehle ich, dass Sie oben in dieser Funktion einen Kabelbaumgenerator aufrufen und das Ergebnis einer lokalen Variable zuweisen, sodass die Funktion, die Sie beenden möchten, mehr aussieht, wenn Sie fertig sind.

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

Die Lösung, die ich hier zur Verfügung gestellt habe, ist die, die ich empfehle, wenn Sie einen Javascript-Runner-Container mit Funktionen wie exit, assert, mock und solchen erstellen möchten. Ich denke, dies ist der bessere Weg, um diese Containerschiff zu bauen und mein eigenes Boot zu erstellen übertragbare Funktionen. - corpus_khu

1
alignedFiberS

Erstellen Sie einfach eine BOOL-Bedingung. Hier brauchen Sie keinen komplizierten Code.

Wenn Sie einmal auf true/oder mehrmals drehen, erhalten Sie mit Beide eine Lösungszeile/nicht mehrere -.

0
moni

Wenn Sie eine undefinierte Funktion im Skript verwenden, wird das Skript aufgrund von "Uncaught ReferenceError" angehalten. Ich habe versucht, indem ich folgenden Code und die ersten beiden Zeilen ausgeführt habe.

Ich denke, das ist der beste Weg, um das Skript zu stoppen. Wenn es einen anderen Weg gibt, kommentiere mich bitte. Ich möchte auch einen anderen besten und einfacheren Weg kennenlernen. Übrigens, ich habe keine eingebaute Exit- oder Die-Funktion in Javascript wie PHP zum Beenden des Skripts erhalten. Wenn jemand es weiß, dann lass es mich wissen.

alert('Hello');

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

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

alert('bye');

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

Ich denke, diese Frage wurde beantwortet, klicken Sie auf hier für weitere Informationen. Unten ist die kurze Antwort, die es gepostet wird.

throw new Error("Stop script");

Sie können Ihren Browser auch zum Hinzufügen von Haltepunkten verwenden. Jeder Browser ist ähnlich. Informationen zu Ihrem Browser finden Sie weiter unten.

Für Chrome Haltepunktinformationen klicken Sie auf hier
Für Informationen zu Firefox-Haltepunkten klicken Sie auf hier
Informationen zu Explorer-Haltepunkten Klicken
Für Informationen zu Safari-Haltepunkten klicken Sie auf hier

0
alfmonc

Diese kleine Funktion kommt der Exit () von PHP sehr nahe. Fügen Sie wie bei den anderen Lösungen nichts anderes hinzu.

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

werfen "";

Ist ein Missbrauch des Konzepts aber wahrscheinlich die einzige Option. Und ja, Sie müssen alle Ereignis-Listener zurücksetzen, genau wie in den akzeptierten Antworten erwähnt. Sie würden auch einen einzigen Einstiegspunkt benötigen, wenn ich recht habe.

Oben drauf: Sie möchten eine Seite, die Sie per E-Mail benachrichtigt, sobald sie ausgelöst wird - Sie können beispielsweise Raven/Sentry dafür verwenden. Das heißt aber, Sie produzieren sich selbst falsch positiv. In diesem Fall müssen Sie auch den Standard-Handler aktualisieren, um solche Ereignisse herauszufiltern, oder diese Ereignisse auf Ignorieren im Sentry-Dashboard setzen.

window.stop ();

Dies funktioniert nicht beim Laden der Seite. Es beendet auch die Dekodierung der Seite. Sie können es also nicht wirklich verwenden, um Benutzern eine javascript-freie Variante Ihrer Seite anzubieten.

debugger;

Hält die Ausführung nur bei geöffnetem Debugger an. Funktioniert großartig, aber nicht lieferbar.

UPDATE: Dies funktioniert, solange Sie nicht catch es!

throw window.location.assign('dead.html');
0
Dylan Sharhon

Wenn Sie nach einem Weg suchen, um die Ausführung aller Javascript zwangsweise auf einer Seite zu beenden, bin ich nicht sicher, ob es einen offiziell genehmigten Weg gibt, um dies zu tun - es scheint, als ob die Dinge ein Sicherheitsrisiko darstellen könnten (obwohl dies zu groß ist) (ehrlich gesagt, ich kann mir nicht vorstellen, wie es mir aus dem Kopf gehen würde). Normalerweise wird in Javascript, wenn Sie möchten, dass Ihr Code nicht mehr ausgeführt wird, return aus der Funktion ausgewählt, die gerade ausgeführt wird. (Die return-Anweisung ist optional, wenn dies das letzte Element in der Funktion ist und die Funktion keinen Wert zurückgeben soll.) Wenn aus irgendeinem Grund die Rückkehr nicht gut genug für Sie ist, sollten Sie wahrscheinlich mehr Details in die Frage einschließen, warum Sie dies tun Ich denke, Sie brauchen es und vielleicht kann jemand eine alternative Lösung anbieten.

Beachten Sie, dass die meisten Javascript-Interpreter der Browser in der Praxis das aktuelle Skript einfach abbrechen, wenn ein Fehler auftritt. So können Sie beispielsweise auf ein Attribut einer nicht gesetzten Variablen zugreifen:

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

und es wird wahrscheinlich das Skript abbrechen. Aber man sollte sich nicht darauf verlassen, denn es ist überhaupt kein Standard und es scheint wirklich eine schreckliche Praxis zu sein.

EDIT: OK, vielleicht war dies angesichts von Ólafur nicht so eine gute Antwort. Obwohl die die()-Funktion, mit der er verbunden ist, im Grunde meinen zweiten Absatz implementiert, d. H., Er gibt nur einen Fehler aus.

0
David Z

In meinem Fall habe ich die window.stop API verwendet, die wie das Klicken des X-Buttons in Ihrem Browser aussieht:

window.stop();
0
Musa