Pergunta

Como posso sair do script JavaScript muito parecido exit ou die do PHP? Eu sei que não é a melhor prática de programação, mas eu preciso.

Foi útil?

Solução

JavaScript equivalente para o PHP die . BTW ele só chama exit() (graças 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 '';
}

Outras dicas

funções "saída" normalmente sair do programa ou script juntamente com uma mensagem de erro como paramete. Por exemplo dado (...) em php

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

O equivalente em JS é para sinalizar um erro com o lance palavra-chave como este:

throw new Error();

Você pode facilmente testar isso:

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

x
>>>undefined
m
>>>100

Mesmo nos programas simples sem alças, eventos e tal, o melhor é colocar o código em uma função "main", mesmo quando é o único procedimento:

<script> 
function main()
{
//code

}
main();
</script>

Desta forma, quando você quer parar o programa que você pode usar o "retorno".

muitas maneiras para sair um script JS ou Node . Aqui estão os mais 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);

Se você está no REPL (ou seja, após a execução node na linha de comando), você pode digitar .exit para sair.

Se você não se importa que é um erro apenas escrever:

fail;

Isso vai parar o seu código principal (global) de prosseguir. Útil para alguns aspectos da depuração / teste.

Coloque a palavra-chave debugger; em seu código JavaScript onde você quer parar a execução. Em seguida, abra as ferramentas de desenvolvimento do seu navegador favorito e recarregue a página. Agora deve pausar automaticamente. Abra o Fontes seção de suas ferramentas:. A palavra-chave debugger; é destacado e você tem a opção de continuar a execução de script

Espero que ajude.

Mais informações em:

No meu caso eu usei o window.stop API que é como clicar no botão X no seu navegador:

window.stop();

Esta resposta fornece detalhes demonstrando quadro extra que vai ajudar a resolver este e outros saída precoce, exceções, controle de processos e necessidades manipulação de função sequenciais em javascripts modulares. Solução fornece exemplos de fecho. Esta resposta assume que o indivíduo gostaria outros scripts na página para continuar a executar após o script em questão foi encerrado.

exemplo vivo de solução simples aqui: 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>

Acima é um "CallRunner" que fornece uma maneira muito simples para sair de graça, só passando a sua função para o corredor.

A nomeação variável no violino pode ser confuso, a função chamada "diversão" é o nome usado dentro safetyRun para fazer referência a função que está tentando sair, e exitErr é o nome usado para fazer referência a função corremos para realmente completa a saída. Também um pouco confusa é: uma vez que os concluída exitErr, o quadro de pilha ainda não está liberada a partir do thread de controle que chamou a função que saiu. Porque ainda temos thread de controle, podemos usar funções ou códigos de erro empurrado para uma matriz na função exitErr e chamá-los itteratively antes de retornar para permitir quaisquer outras funções para executar. Isto é o que nos permite alterar qualquer pesos ou fazer correções ou definir qualquer estado necessário que possamos usar para alerta o erro correção estados precisam de atenção, enviar um relatório de log ou mesmo completa desafiando limpeza e autonomamente corrigir a função em segundo plano e itteratively chamar exitErr até completar uma volta em vez de um lance permitindo assim a função que está tentando sair cedo completa, (sugiro fazer isso offmainthread). Este "wrapper / arnês" poderia ser uma boa maneira de verificar versões do navegador e outras coisas no início de uma função, você pode até mesmo fazer um estático ou dinâmico de importação aqui se você gerenciar suas próprias bibliotecas ou o que nunca você pode realmente pensar. Sair é apenas uma função fundemental que podem ser disponibilizados para a sua função por envolvê-lo assim.

O código no violino é um pouco sujo e não muito, novas construções ES6 pode fazer isso mais bonita. Além disso, eu recomendo que você chama um gerador de chicote de fios no topo desta função e atribuir o resultado a uma var local para a função que você quer saída pode parecer mais com o código abaixo. A fim de manter thread de controle sem liberar a pilha, você ainda vai precisar precisa ter um harness.run (function (arnês) {/ MyVanillaFunc /}) para envolver sua função de baunilha, caso contrário, a seguir em teoria, deve funcionar. Embrulho é exatamente o que eu fiz no código exitEarly acima.

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

A solução que eu forneci aqui é o que eu recomendo se a sua intenção é construir um recipiente corredor javascript com recursos como saída, assert, simulada eo tais construído dentro. Eu acho que esta é a melhor maneira de construir este containership e fazer minhas funções transmissível.

Se você está procurando uma maneira de forçar terminar a execução de toda a Javascript em uma página, eu não estou certo de que há uma maneira oficialmente sancionada a fazer isso - parece que o tipo de coisa que pode ser um risco de segurança (embora para ser honesto, eu não consigo pensar em como seria fora do topo da minha cabeça). Normalmente em JavaScript quando você quer que seu código para parar de correr, você só return de qualquer função está em execução. (A declaração return é opcional se é a última coisa na função e a função não deve retornar um valor) Se há alguma razão o retorno não é bom o suficiente para você, você provavelmente deve editar mais detalhadamente a questão de por que você acha que precisa dele e, talvez, alguém pode oferecer uma solução alternativa.

Note que, na prática, a maioria dos navegadores intérpretes Javascript vai simplesmente parar de executar o script atual se encontrar um erro. Então você pode fazer algo como acessar um atributo de uma variável unset:

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

e provavelmente abortar o script. Mas você não deve contar com isso porque não é de todo normal, e ele realmente parece ser uma prática terrível.

Editar : OK, talvez isso não era uma resposta tão boa à luz da Ólafur de. Embora a função die() ele ligado a implementa, basicamente, o meu segundo parágrafo, ou seja, ele só gera um erro.

UPDATE:! Isso funciona, desde que você não catch it

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

Esta função pouco chega bem perto de imitar saída do PHP (). Tal como acontece com as outras soluções, não adicione qualquer outra coisa.

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

Basta criar uma condição BOOL, não há necessidade de código complicado aqui ..

Se até mesmo uma vez que você ligá-lo aos verdadeiros / ou várias vezes, será tanto dar-lhe uma linha de solução / não múltipla - basicamente simples como isso.

jogue "";

é um mau uso do conceito, mas, provavelmente, a única opção. E, sim, você terá que redefinir todos os ouvintes de eventos, assim como a resposta aceita menciona. Você também precisa de um único ponto de entrada se estou certo.

No topo dela: Você quer uma página que relatórios por e-mail assim que ele joga - você pode usar por exemplo Corvo / Sentry para isso. Mas isso significa que, você produz-se falsos positivos. Nesse caso, você também precisa atualizar o manipulador padrão para filtrar esses eventos fora ou conjunto de tais eventos ignorar no painel do Sentry.

window.stop ();

Esta não funciona durante o carregamento da página. Ele pára de decodificação da página também. Então você não pode realmente usá-lo para oferta usuário uma variante livre de javascript de sua página.

depurador;

Para a execução apenas com depurador abriu. Funciona muito bem, mas não uma entrega.

Eu acho que essa pergunta já foi respondida, clique aqui para Mais Informações. Abaixo está a resposta curta é publicado.

throw new Error("Stop script");

Você também pode utilizar o navegador para adicionar pontos de quebra, cada navegador é semelhante, informações de verificação abaixo para o seu navegador.

Para Chrome break points informações clique aqui
Para Firefox break points informações clique aqui
Para Explorador break points informações clique
Para Safari break points informações clique aqui

Se você usar qualquer função indefinida no script, em seguida, script irá parar devido a "Uncaught ReferenceError". Eu tentei seguindo código e as primeiras duas linhas executadas.

Eu acho que, esta é a melhor maneira de parar o script. Se há alguma outra maneira, em seguida, por favor, comente mim. Eu também quero saber outra melhor e simples maneira. BTW, eu não consegui sair ou morrer função inerente em Javascript como PHP para encerrar o script. Se alguém sabe, então por favor me avise.

alert('Hello');

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

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

alert('bye');

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

Este é um exemplo, que, se uma condição existe, então terminar o script. Eu uso isso na minha SSE javascript do lado do cliente, se o

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

canot ser analisado desde JSON análise ...

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

... de qualquer forma a idéia geral é:

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

este terminará / morrer seu script javasript

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top