Come terminare lo script in Javascript

Ho un codice che uscirà dallo script js in modo simile a PHP “exit” o “die“. (So ​​che non è la migliore pratica di programmazione ma ne ho bisogno).

Equivalente JavaScript per il die di PHP . BTW chiama solo exit() (grazie 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 ''; } 

Le funzioni “exit” di solito escono dal programma o dallo script insieme a un messaggio di errore come paramete. Per esempio muori (…) in php

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

L’equivalente in JS è quello di segnalare un errore con la parola chiave throw come questo:

 throw new Error(); 

Puoi facilmente testare questo:

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

Anche nei programmi semplici senza handle, eventi e simili, è meglio inserire il codice in una funzione “principale”, anche quando è l’unica procedura:

  

In questo modo, quando vuoi fermare il programma puoi usare “return”.

Se non ti interessa che sia un errore scrivi semplicemente:

 fail; 

Ciò impedirà al tuo codice (globale) principale di procedere. Utile per alcuni aspetti del debugging / testing.

Esistono molti modi per uscire da uno script JS o Node. Ecco i più rilevanti:

 // 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 sei nella REPL (cioè dopo aver eseguito il node sulla riga di comando), puoi digitare .exit per uscire.

Posiziona il debugger; parola chiave nel codice JavaScript in cui si desidera interrompere l’esecuzione. Quindi apri gli strumenti di sviluppo del browser preferito e ricarica la pagina. Ora dovrebbe fermarsi automaticamente. Apri la sezione Sorgenti dei tuoi strumenti: il debugger; parola chiave è evidenziata e hai la possibilità di riprendere l’esecuzione dello script.

Spero possa essere d’aiuto.

Maggiori informazioni su:

Questa risposta fornisce dettagli che dimostrano una struttura supplementare che aiuterà a risolvere questo e altri problemi di uscita anticipata, eccezioni, controllo di processo e gestione sequenziale delle funzioni nei javascript modulari. La soluzione fornisce esempi di chiusura. Questa risposta presuppone che l’individuo desideri che altri script nella pagina continuino a essere eseguiti dopo che lo script in questione è stato chiuso.

Esempio live di soluzione semplice qui: https://codepen.io/corpus_khu/pen/VpMQzO

  

Sopra è un modo molto semplice per uscire. Prima di inviare la tua funzione a questo “Runner” ti consiglio di avvolgere la tua funzione in un’imbracatura di test avvolgendo un object che carica un’imbracatura e può essere eseguito, l’imbracatura di test dovrebbe esporre metodi come exit () alla tua funzione in modo che non abbiano essere passato.

Esempi di tutto ciò di cui hai bisogno per build una buona strategia di uscita sono disponibili su github qui (file: pseudo_threads2.js): https://github.com/fromSpace/js-recursionwithevents-practice

Versione demo live qui: https://fromspace.github.io/js-recursionwithevents-practice/

Notate in pseudo_threads2.js che la funzione simConstantMomentum () restituisce una funzione che ha scope less lessico con tutte le funzioni del cablaggio. Invece ti consiglio di chiamare un generatore di cablaggio nella parte superiore di questa funzione e assegnare il suo risultato a una variabile locale in modo che la funzione che vuoi uscire assomigli più a questo quando hai finito.

 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 soluzione che ho fornito qui è quella che raccomando se la tua intenzione è quella di build un contenitore di javascript runner con funzionalità come exit, assert, mock e così integrato. Penso che questo sia il modo migliore per build questa portacontainer e rendere il mio funzioni trasmissibili. – corpus_khu

Se stai cercando un modo per terminare forzatamente l’esecuzione di tutti i Javascript su una pagina, non sono sicuro che ci sia un modo ufficialmente sanzionato per farlo – sembra il tipo di cosa che potrebbe essere un rischio per la sicurezza (anche se per sii onesto, non riesco a pensare a come sarebbe fuori di testa. Normalmente in Javascript quando vuoi che il tuo codice smetta di funzionare, devi solo return da qualunque funzione sia in esecuzione. (L’istruzione return è opzionale se è l’ultima cosa nella funzione e la funzione non dovrebbe restituire un valore) Se c’è qualche motivo per cui il ritorno non è abbastanza buono per te, dovresti probabilmente modificare più dettagli nella domanda sul perché tu pensa di averne bisogno e forse qualcuno può offrire una soluzione alternativa.

Si noti che, in pratica, la maggior parte degli interpreti Javascript dei browser interromperà semplicemente l’esecuzione dello script corrente se incontrano un errore. Quindi puoi fare qualcosa come accedere a un attributo di una variabile non impostata:

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

e probabilmente interromperà la sceneggiatura. Ma non dovresti contare su questo perché non è affatto standard, e sembra davvero una pratica terribile.

EDIT : OK, forse questa non è stata una buona risposta alla luce di Ólafur’s. Sebbene la funzione die() ha collegato implementa fondamentalmente il mio secondo paragrafo, cioè genera semplicemente un errore.

Nel mio caso ho usato l’API Window.stop che è come fare clic sul pulsante X sul tuo browser:

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

AGGIORNAMENTO: Funziona finché non lo catch !

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

Questo è un esempio, che, se esiste una condizione, quindi terminare lo script. Lo uso nel mio javascript lato client SSE, se il

  

può essere analizzato direttamente da JSON parse …

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

… comunque l’idea generale è:

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

questo terminerà / muore il tuo script javasript