Jak mogę wyjść ze skryptu JavaScript, podobnie jak PHP exit
lub die
? Wiem, że to nie jest najlepsza praktyka programistyczna, ale muszę.
return;
może wystarczyć w zależności od Twoich wymagań, działa jak die () bez parametrów.
Jak mogę wyjść ze skryptu JavaScript, podobnie jak PHP exit
lub die
? Wiem, że to nie jest najlepsza praktyka programistyczna, ale muszę.
return;
może wystarczyć w zależności od Twoich wymagań, działa jak die () bez parametrów.
Odpowiedzi:
Odpowiednik JavaScript dla PHPdie
. BTW to po prostu dzwoni exit()
(dzięki 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 '';
}
Funkcje „wyjścia” zazwyczaj kończą działanie programu lub skryptu wraz z komunikatem o błędzie jako parametrem. Na przykład die (...) w php
die("sorry my fault, didn't mean to but now I am in byte nirvana")
Odpowiednikiem w JS jest zasygnalizowanie błędu słowem kluczowym throw w następujący sposób:
throw new Error();
Możesz to łatwo przetestować:
var m = 100;
throw '';
var x = 100;
x
>>>undefined
m
>>>100
Jeśli nie obchodzi Cię, że to błąd, po prostu napisz:
fail;
To zatrzyma kontynuację twojego głównego (globalnego) kodu. Przydatne w niektórych aspektach debugowania / testowania.
window.fail
nie jest zdefiniowany w obecnych przeglądarkach.
mikeyMouse;
- błąd zniknie. Jest szybki i brudny.
Istnieje wiele sposobów na wyjście ze skryptu JS lub Node. Oto najważniejsze:
// 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);
Jeśli jesteś w REPL (tj. Po uruchomieniu node
w wierszu poleceń), możesz napisać, .exit
aby zakończyć.
W moim przypadku użyłem window.stop
API, które przypomina kliknięcie przycisku X w Twojej przeglądarce:
window.stop();
Umieść debugger;
słowo kluczowe w kodzie JavaScript, w którym chcesz zatrzymać wykonywanie. Następnie otwórz narzędzia programistyczne swojej ulubionej przeglądarki i ponownie załaduj stronę. Teraz powinno się automatycznie zatrzymać. Otwórz sekcję Źródła w swoich narzędziach: debugger;
słowo kluczowe jest podświetlone i masz możliwość wznowienia wykonywania skryptu.
Mam nadzieję, że to pomoże.
Więcej informacji na:
Myślę, że odpowiedź na to pytanie została udzielona, kliknij tutaj, aby uzyskać więcej informacji. Poniżej znajduje się krótka odpowiedź, którą opublikowano.
throw new Error("Stop script");
Możesz także użyć przeglądarki, aby dodać punkty przerwania, każda przeglądarka jest podobna, sprawdź informacje poniżej dla swojej przeglądarki.
Informacje o punktach przerwania przeglądarki Chrome kliknij tutaj Informacje o
punktach przerwania przeglądarki Firefox kliknij tutaj
W przypadku informacji o punktach przerwania przeglądarki Explorer kliknij opcję Informacje o punktach przerwania przeglądarki
Safari kliknij tutaj
Jeśli szukasz sposobu na wymuszenie zakończenia wykonywania całego kodu JavaScript na stronie, nie jestem pewien, czy istnieje oficjalnie usankcjonowany sposób, aby to zrobić - wydaje się, że jest to coś, co może stanowić zagrożenie bezpieczeństwa (chociaż szczerze mówiąc, nie mogę sobie wyobrazić, jak by to było poza moją głową). Zwykle w JavaScript, gdy chcesz, aby kod przestał działać, po prostu return
wykonujesz dowolną funkcję. ( return
Instrukcja jest opcjonalna, jeśli jest ostatnią rzeczą w funkcji, a funkcja nie powinna zwracać wartości) Jeśli istnieje jakiś powód, dla którego zwrot nie jest wystarczająco dobry, prawdopodobnie powinieneś edytować więcej szczegółów w pytaniu, dlaczego myślisz potrzebujesz tego i być może ktoś zaoferuje alternatywne rozwiązanie.
Należy zauważyć, że w praktyce większość interpreterów JavaScript w przeglądarkach po prostu przestaje uruchamiać bieżący skrypt, jeśli napotka błąd. Możesz więc zrobić coś takiego, jak uzyskanie dostępu do atrybutu nieustawionej zmiennej:
function exit() {
p.blah();
}
i prawdopodobnie przerwie skrypt. Ale nie powinieneś na to liczyć, ponieważ nie jest to wcale standardowe i naprawdę wydaje się okropną praktyką.
EDYCJA : OK, może to nie była taka dobra odpowiedź w świetle Ólafura. Chociaż die()
funkcja, z którą się łączył, w zasadzie implementuje mój drugi akapit, tj. Po prostu zgłasza błąd.
Jest to nadużycie koncepcji, ale prawdopodobnie jedyna opcja. I tak, będziesz musiał zresetować wszystkie odbiorniki zdarzeń, tak jak wspomina zaakceptowana odpowiedź. Jeśli mam rację, potrzebowałbyś również jednego punktu wejścia.
A do tego: chcesz mieć stronę, która raportuje do ciebie e-mailem, gdy tylko się pojawi - możesz użyć do tego na przykład Raven / Sentry. Ale to oznacza, że produkujesz fałszywe alarmy. W takim przypadku musisz również zaktualizować domyślną procedurę obsługi, aby odfiltrować takie zdarzenia lub ustawić takie zdarzenia na ignoruj na pulpicie nawigacyjnym Sentry.
To nie działa podczas ładowania strony. Zatrzymuje również dekodowanie strony. Więc tak naprawdę nie możesz go użyć, aby zaoferować użytkownikowi wariant swojej strony wolny od javascript.
Zatrzymuje wykonywanie tylko przy otwartym debugerze. Działa świetnie, ale nie jest to element dostarczalny.
W JavaScript istnieje wiele sposobów, poniżej znajduje się kilka z nich
Metoda 1:
throw new Error("Something went badly wrong!");
Metoda 2:
return;
Metoda 3:
return false;
Metoda 4:
new new
Metoda 5:
napisz swoją funkcję niestandardową użyj powyższej metody i zadzwoń tam, gdzie potrzebujesz
Uwaga: Jeśli chcesz po prostu wstrzymać wykonywanie kodu, możesz użyć
debugger;
Ta mała funkcja jest bardzo bliska naśladowaniu wyjścia PHP (). Podobnie jak w przypadku innych rozwiązań, nie dodawaj niczego więcej.
function exit(Msg)
{
Msg=Msg?'*** '+Msg:'';
if (Msg) alert(Msg);
throw new Error();
} // exit
Jeśli użyjesz jakiejkolwiek niezdefiniowanej funkcji w skrypcie, skrypt zatrzyma się z powodu „Uncaught ReferenceError”. Próbowałem postępując zgodnie z kodem i wykonując pierwsze dwie linie.
Myślę, że to najlepszy sposób na zatrzymanie scenariusza. Jeśli istnieje inny sposób, to proszę o komentarz. Chcę też poznać inny najlepszy i prosty sposób. BTW, nie dostałem wyjścia ani nie umarłem wbudowanej funkcji w JavaScript, takiej jak PHP, do zakończenia skryptu. Jeśli ktoś wie, daj mi znać.
alert('Hello');
document.write('Hello User!!!');
die(); //Uncaught ReferenceError: die is not defined
alert('bye');
document.write('Bye User!!!');
Jeśli chcesz po prostu zatrzymać wykonywanie dalszego kodu bez „zgłaszania” jakiegokolwiek błędu, możesz tymczasowo nadpisać, window.onerror
jak pokazano na 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.");
Używam iobrokera i łatwo udało mi się zatrzymać skrypt za pomocą
stopScript();
Wiem, że to jest stare, ale jeśli chcesz mieć podobną die()
funkcję PHP , możesz zrobić:
function die(reason) {
throw new Error(reason);
}
Stosowanie:
console.log("Hello");
die("Exiting script..."); // Kills script right here
console.log("World!");
Powyższy przykład wypisze tylko „Hello”.
używam tego fragmentu kodu, aby zatrzymać wykonywanie:
throw new FatalError("!! Stop JS !!");
pojawi się błąd konsoli, ale to działa dobrze dla mnie.
Jest to przykład, że jeśli exist stan, a następnie zakończyć skrypt. Używam tego w moim javascript po stronie klienta SSE, jeśli
<script src="sse-clint.js" host="https://sse.host" query='["q1,"q2"]' ></script>
nie można przeanalizować bezpośrednio z analizy JSON ...
if( ! SSE_HOST ) throw new Error(['[!] SSE.js: ERR_NOHOST - finished !']);
... w każdym razie ogólna idea jest taka:
if( error==true) throw new Error([ 'You have This error' , 'At this file', 'At this line' ]);
spowoduje to zakończenie / śmierć skryptu javasript
używam instrukcji return zamiast throw, ponieważ throw powoduje błąd w konsoli. najlepszym sposobem jest sprawdzenie stanu
if(condition){
return //whatever you want to return
}
to po prostu zatrzymuje wykonywanie programu z tej linii, zamiast wyświetlać błędy w konsoli.
if (condition) { new new }
lub if (condition) { purpleMonkeyDishwasher(); }
.