Pregunta

¿Cómo puedo salir de la secuencia de comandos JavaScript al igual que exit o die de PHP? Yo sé que no es la mejor práctica de programación pero necesito.

¿Fue útil?

Solución

JavaScript equivalente para PHP die . Por cierto que sólo llama exit() (gracias 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 '';
}

Otros consejos

Funciones de "salida" suele salir del programa o guión junto con un mensaje de error como Paramete. Por ejemplo morir (...) en php

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

El equivalente en JS es para señalar un error con el tirar de palabras clave como esto:

throw new Error();

Se puede probar fácilmente la siguiente:

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

x
>>>undefined
m
>>>100

Incluso en programas sencillos sin agarradera, eventos y cosas así, lo mejor es poner el código en una función "principal", incluso cuando es el único procedimiento:

<script> 
function main()
{
//code

}
main();
</script>

De esta manera, cuando se desea detener el programa que puede utilizar "retorno".

para salir de un JS o script Nodo . Éstos son los más relevantes:

// 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 usted está en el REPL (es decir, después de ejecutar node en la línea de comandos), puede escribir .exit de salida.

Si no le importa que se trata de un error acaba de escribir:

fail;

Esto impedirá que el código principal (global) del procedimiento. Útil para algunos aspectos de la depuración / pruebas.

Coloque la palabra clave debugger; en el código JavaScript en el que desea detener la ejecución. A continuación, abra las herramientas de desarrollo de su navegador favorito y volver a cargar la página. Ahora se debe hacer una pausa automáticamente. Abrir los Fuentes de sus herramientas:. Se destaca la palabra clave debugger; y usted tiene la opción de reanudar la ejecución del script

espero que ayude.

Más información en:

En mi caso he utilizado el window.stop API que es como hacer clic en el botón X en su navegador:

window.stop();

Esta respuesta proporciona datos que demuestran marco adicional que ayudarán a resolver esto y otra salida temprana, excepciones, control de procesos y necesidades de manejo secuencial de funciones en javascript modulares. Solución proporciona ejemplos de cierre. Esta respuesta supone que el individuo le gustaría otras secuencias de comandos en la página para continuar ejecutándose después de la secuencia de comandos en cuestión ha salido.

ejemplo vivo de la solución simple aquí: 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>

Por encima es un "CallRunner" que proporciona una manera muy simple para salir de forma gratuita con sólo pasar su función para el corredor.

La variable de nombres en el violín puede ser confuso, la función llamada "diversión" es el nombre que se utiliza dentro de safetyRun hacer referencia a la función que estamos tratando de salir, y exitErr es el nombre que se utiliza para hacer referencia a la función corremos realmente completa la salida. También es un poco confuso: una vez que el exitErr completa, el marco de pila todavía no se libera desde el hilo de mando que ha pedido la función que nos salía. Porque todavía tenemos hebra de control podemos utilizar funciones o códigos de error empujado a una matriz en la función exitErr y llamarlos itteratively antes de volver a permitir que ninguna otra función a ejecutar. Esto es lo que nos permite cambiar cualquier pesas o hacer correcciones o conjunto cualquier estado necesita que podemos utilizar para alertar lo que los estados de corrección de errores necesitan atención, enviar un informe de registro o incluso la limpieza desafiante completa y autónoma fijar la función en el fondo y itteratively llamar exitErr hasta que se complete una vuelta en lugar de saque permitiendo así la función que estamos tratando de salir temprano completa, (se sugiere hacer esto offmainthread). Esta "envoltura / arnés" podría ser una buena manera de verificar las versiones del navegador y otras cosas en el inicio de una función, incluso se podría realizar una importación estática o dinámica aquí si usted maneja sus propias bibliotecas o lo que realmente se puede imaginar. La salida es sólo una función fundemental que pueden estar disponibles para su función envolviéndolo como este.

El código en el violín es un poco bonitas, nuevas construcciones ES6 sucia y no pueden hacer esto más bonita. Además te recomiendo que llame a un generador de arnés en la parte superior de esta función y asigna el resultado a un var lo que la función que desea salir puede verse más como el código de abajo. Con el fin de mantener su hilo de ejecución y sin la liberación de la pila, que todavía tendrá que tener un harness.run (function (arnés) {/ MyVanillaFunc /}) para envolver su función de vainilla, de lo contrario el siguiente en teoría, debería funcionar. Envoltura es exactamente lo que hice en el código exitEarly anteriormente.

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 solución que he proporcionado aquí es el que recomiendan si su intención es construir un contenedor corredor javascript con capacidades tales como la salida, valer, maqueta y la dicha incorporado. Creo que esta es la mejor manera de construir esta portacontenedores y hacer mis funciones transmisible.

Si usted está buscando una manera de poner fin a la fuerza a la ejecución de todas Javascript en una página, no estoy seguro de que hay una manera aprobación oficial para hacer eso - parece ser el tipo de cosa que podría ser un riesgo de seguridad (aunque para ser honesto, no puedo pensar en cómo sería la parte superior de la cabeza). Normalmente en Javascript cuando se desea su código para detener la ejecución, sólo return de cualquier función está ejecutando. (La declaración return es opcional si es la última cosa en la función y la función no debe devolver un valor) Si hay alguna razón de volver no es lo suficientemente bueno para usted, probablemente debería editar más detalle en la cuestión de por qué cree que lo necesita y tal vez alguien puede ofrecer una solución alternativa.

Tenga en cuenta que, en la práctica, la mayoría de los intérpretes de JavaScript navegadores simplemente dejarán de funcionar el script actual si se encuentran con un error. Así que usted puede hacer algo como el acceso a un atributo de una variable unset:

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

y será probablemente abortar el guión. Pero no se debe contar con eso, porque no es en absoluto normal, y lo que realmente parece una terrible práctica.

editar : OK, tal vez esto no era una buena respuesta a la luz de tales Ólafur de. Aunque la función die() se vinculó a implementa básicamente mi segundo párrafo, es decir, que sólo emite un error.

ACTUALIZACIÓN: Esto funciona siempre y cuando no se catch

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

Esta función poco acerca mucho a la imitación de salida () de PHP. Al igual que con las otras soluciones, no añadir nada más.

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

Sólo tienes que crear una condición BOOL, sin necesidad de código complicado aquí ..

Si incluso una vez que le da vuelta a la verdadera / o múltiples veces, se le dará tanto una línea de solución / No múltiple - básicamente simple como eso.

tiro "";

Es un mal uso del concepto, pero probablemente la única opción. Y, sí, tendrá que reiniciar todos los detectores de eventos, al igual que la respuesta aceptada menciona. También se necesita un solo punto de entrada si estoy en lo cierto.

En la parte superior de la misma: ¿Quieres una página que informa a usted por correo electrónico tan pronto como se lanza - se puede utilizar, por ejemplo, Cuervo / Sentry para esto. Pero eso significa, que usted produce a sí mismo falsos positivos. En tal caso, también es necesario actualizar el controlador predeterminado para filtrar este tipo de eventos fuera o establecer este tipo de eventos en ignorar en el tablero del centinela.

window.stop ();

Esto no funciona durante la carga de la página. Se detiene la decodificación de la página también. Así que realmente no se puede utilizar para ofrecer una variante del usuario sin Javascript de su página.

depurador;

detiene la ejecución únicamente con depurador abrió. Funciona muy bien, pero no es un entregable.

Creo que esta pregunta ha sido contestada, haga clic aquí para más información. A continuación se muestra la respuesta corta se registró.

throw new Error("Stop script");
También

Puede utilizado su navegador para añadir puntos de ruptura, todos los navegadores es similar, compruebe información a continuación para su navegador.

Para Chrome puntos de quiebre información hacer clic aquí
Para Firefox puntos de quiebre información hacer clic aquí
Para el Explorador de puntos de quiebre información clic
Para Safari puntos de quiebre información hacer clic aquí

Si se utiliza cualquier función no definida en el guión y luego la escritura se detendrá debido a la "ReferenceError no detectada". He tratado siguiendo código y dos primeras líneas ejecutadas.

Creo que, esta es la mejor manera de detener la secuencia de comandos. Si hay alguna otra manera, por favor, me comentar. También quiero conocer otra forma mejor y más sencilla. Por cierto, no he tenido salida o muera función incorporada en Javascript como PHP para terminar el guión. Si alguien sabe, por favor hágamelo saber.

alert('Hello');

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

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

alert('bye');

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

Este es un ejemplo, que, si una condición existe, entonces por terminado el guión. Yo uso este en mi SSE JavaScript del lado del cliente, si el

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

canot ser analizado desde JSON de análisis ...

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

... de todos modos la idea general es la siguiente:

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

esto terminará / die su script javasript

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top