Come posso uscire dallo script JavaScript in modo simile a PHP exit
o die
? So che non è la migliore pratica di programmazione ma ne ho bisogno.
return;
potrebbe essere sufficiente a seconda delle esigenze, si comporta come die () senza parametri.
Come posso uscire dallo script JavaScript in modo simile a PHP exit
o die
? So che non è la migliore pratica di programmazione ma ne ho bisogno.
return;
potrebbe essere sufficiente a seconda delle esigenze, si comporta come die () senza parametri.
Risposte:
Equivalente JavaScript per PHPdie
. A proposito, chiama 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" normalmente escono dal programma o dallo script insieme a un messaggio di errore come parametro. Ad esempio die (...) in php
die("sorry my fault, didn't mean to but now I am in byte nirvana")
L'equivalente in JS è di segnalare un errore con la parola chiave throw in questo modo:
throw new Error();
Puoi facilmente provare questo:
var m = 100;
throw '';
var x = 100;
x
>>>undefined
m
>>>100
Anche in programmi semplici senza handle, eventi e simili, è meglio mettere il codice in una funzione "principale", anche quando è l'unica procedura:
<script>
function main()
{
//code
}
main();
</script>
In questo modo, quando si desidera interrompere il programma, è possibile utilizzare "return".
Se non ti interessa che sia un errore, scrivi:
fail;
Ciò impedirà al tuo codice principale (globale) di procedere. Utile per alcuni aspetti del debug / test.
window.fail
non è definito nei browser attuali.
mikeyMouse;
- l'errore si risolverà. È veloce e sporco.
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 ti trovi in REPL (ovvero dopo aver eseguito node
sulla riga di comando), puoi digitare .exit
per uscire.
Nel mio caso ho usato l' window.stop
API che è come fare clic sul pulsante X sul browser:
window.stop();
Inserisci la debugger;
parola chiave nel tuo codice JavaScript nel punto in cui desideri interrompere l'esecuzione. Quindi apri gli strumenti di sviluppo del tuo browser preferito e ricarica la pagina. Ora dovrebbe fermarsi automaticamente. Apri la sezione Sorgenti dei tuoi strumenti: la debugger;
parola chiave è evidenziata e hai la possibilità di riprendere l'esecuzione dello script.
Spero possa essere d'aiuto.
Maggiori informazioni su:
Penso che questa domanda abbia avuto risposta, clicca qui per maggiori informazioni. Di seguito è la risposta breve che viene pubblicata.
throw new Error("Stop script");
Puoi anche usare il tuo browser per aggiungere punti di interruzione, ogni browser è simile, controlla le informazioni di seguito per il tuo browser.
Per informazioni sui punti di interruzione di Chrome, fare clic qui
Per informazioni sui punti di interruzione di Firefox, fare clic qui
Per informazioni sui punti di interruzione di Explorer, fare
clic su Informazioni sui punti di interruzione di Safari, fare clic qui
Se stai cercando un modo per terminare forzatamente l'esecuzione di tutto il 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 ad essere sincero, non riesco a pensare a come sarebbe fuori dalla mia testa). Normalmente in Javascript quando si desidera interrompere l'esecuzione del codice, return
è possibile eseguire qualsiasi funzione. (L' return
istruzione è facoltativa se è l'ultima cosa nella funzione e la funzione non deve restituire un valore) Se c'è qualche motivo per cui il ritorno non è abbastanza buono per te, probabilmente dovresti modificare più dettagli nella domanda sul perché pensi ne hai bisogno e forse qualcuno può offrire una soluzione alternativa.
In pratica, la maggior parte degli interpreti Javascript della maggior parte dei browser interromperà semplicemente l'esecuzione dello script corrente se riscontrano 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. Sebbene la die()
funzione a cui ha collegato implementa sostanzialmente il mio secondo paragrafo, vale a dire che genera solo un errore.
È un uso improprio del concetto, ma probabilmente l'unica opzione. E, sì, dovrai ripristinare tutti i listener di eventi, proprio come menziona la risposta accettata. Avresti anche bisogno di un unico punto di accesso se ho ragione.
Per di più: vuoi una pagina che ti segnala via e-mail non appena viene lanciata - puoi usare ad esempio Raven / Sentry per questo. Ciò significa che ti produci falsi positivi. In tal caso, è inoltre necessario aggiornare il gestore predefinito per filtrare tali eventi o impostare tali eventi su Ignora sulla dashboard di Sentry.
Questo non funziona durante il caricamento della pagina. Arresta anche la decodifica della pagina. Quindi non puoi davvero usarlo per offrire all'utente una variante senza javascript della tua pagina.
Interrompe l'esecuzione solo con il debugger aperto. Funziona alla grande, ma non è disponibile.
In JavaScript ci sono molti modi, di seguito alcuni di essi
Metodo 1:
throw new Error("Something went badly wrong!");
Metodo 2:
return;
Metodo 3:
return false;
Metodo 4:
new new
Metodo 5:
scrivi la tua funzione personalizzata usa il metodo sopra e chiama dove ti serve
Nota: se si desidera solo mettere in pausa l'esecuzione del codice, è possibile utilizzare
debugger;
Questa piccola funzione si avvicina molto a imitare l'uscita di PHP (). Come con le altre soluzioni, non aggiungere altro.
function exit(Msg)
{
Msg=Msg?'*** '+Msg:'';
if (Msg) alert(Msg);
throw new Error();
} // exit
Se si utilizza una funzione non definita nello script, lo script verrà interrotto a causa di "Uncaught ReferenceError". Ho provato seguendo il codice e le prime due righe eseguite.
Penso che questo sia il modo migliore per fermare la sceneggiatura. Se c'è un altro modo, per favore commentami. Voglio anche conoscere un altro modo migliore e semplice. A proposito, non ho ottenuto la funzione di uscita o die built in Javascript come PHP per terminare lo script. Se qualcuno lo sa, per favore fatemelo sapere.
alert('Hello');
document.write('Hello User!!!');
die(); //Uncaught ReferenceError: die is not defined
alert('bye');
document.write('Bye User!!!');
Se si desidera solo interrompere l'esecuzione di ulteriore codice senza "lanciare" alcun errore, è possibile sovrascrivere temporaneamente window.onerror
come mostrato in cross-exit
:
function exit(code) {
const prevOnError = window.onerror
window.onerror = () => {
window.onerror = prevOnError
return true
}
throw new Error(`Script termination with code ${code || 0}.`)
}
console.log("This message is logged.");
exit();
console.log("This message isn't logged.");
Sto usando iobroker e sono riuscito facilmente a fermare la sceneggiatura con
stopScript();
io uso questo pezzo di codice per fermare l'esecuzione:
throw new FatalError("!! Stop JS !!");
otterrai un errore della console, ma per me funziona bene.
Questo è un esempio che, se esiste una condizione, termina lo script. Lo uso nel mio javascript lato client SSE, se il
<script src="sse-clint.js" host="https://sse.host" query='["q1,"q2"]' ></script>
non può essere analizzato direttamente dall'analisi JSON ...
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à / morirà il tuo script javasript
io uso la dichiarazione di ritorno invece di lanciare come lancio dà errore nella console. il modo migliore per farlo è controllare la condizione
if(condition){
return //whatever you want to return
}
questo semplicemente interrompe l'esecuzione del programma da quella linea, invece di dare errori nella console.
if (condition) { new new }
o if (condition) { purpleMonkeyDishwasher(); }
.