Is het mogelijk om de uitvoering van JavaScript te stoppen?

Is het op de een of andere manier mogelijk om JavaScriptte stoppen of te beëindigen op een manier die elke verdere op JavaScript gebaseerde uitvoering plaatsvindt, zonder de browser opnieuw te laden?

Ik denk aan een JavaScript-equivalent van exit()in PHP.


Antwoord 1, autoriteit 100%

Kort antwoord:

throw new Error("Something went badly wrong!");

Als je meer wilt weten, lees dan verder.


Wilt u de uitvoering van JavaScript voor het ontwikkelen/debuggen stoppen?

De uitdrukking debugger;in uw code, zal de uitvoering van de pagina stoppen, en vervolgens zullen de ontwikkelaarstools van uw browser u in staat stellen de status van uw pagina te bekijken op het moment dat deze werd bevroren.

Wilt u uw aanvraag willekeurig en opzettelijk stoppen?

Op fout?

In plaats van te proberen alles te stoppen, laat je code de fout afhandelen. Lees over Exceptions door te googlen. Ze zijn een slimme manier om uw code naar foutafhandelingsprocedures te laten “springen” zonder vervelende if/else-blokken te gebruiken.

Nadat je erover gelezen hebt en je denkt dat het onderbreken van de hele code absoluut de enige optie is, is het de oplossing om een uitzondering te maken die nergens “gevangen” zal worden, behalve in de “root”-scope van je toepassing:

// creates a new exception type:
function FatalError(){ Error.apply(this, arguments); this.name = "FatalError"; }
FatalError.prototype = Object.create(Error.prototype);
// and then, use this to trigger the error:
throw new FatalError("Something went badly wrong!");

zorg ervoor dat je geen catch()blokken hebt die elkeuitzondering opvangen; in dit geval wijzigt u ze om uw "FatalError"-uitzonderingopnieuw te gebruiken:

catch(exc){ if(exc instanceof FatalError) throw exc; else /* current code here */ }

Wanneer een taak is voltooid of een willekeurige gebeurtenis plaatsvindt?

return;beëindigt de uitvoeringsstroom van de huidige functie.

if(someEventHappened) return; // Will prevent subsequent code from being executed
alert("This alert will never be shown.");

Opmerking: return;werkt alleen binnen een functie.

In beide gevallen…

…misschien wilt u ook weten hoe u asynchrone code kunt stoppen. Het is gedaan met clearTimeouten clearInterval. Ten slotte, om XHRte stoppen (Ajax) verzoeken, kunt u de methode xhrObj.abort()gebruiken (die beschikbaar is in ook jQuery).


Antwoord 2, autoriteit 23%

Je kunt een JavaScript-typfout maken 😀 (denk hier buiten de kaders)

thisFunctionDoesNotExistAndWasCreatedWithTheOnlyPurposeOfStopJavascriptExecutionOfAllTypesIncludingCatchAndAnyArbitraryWeirdScenario();

Of zoiets als:

new new

Antwoord 3, Autoriteit 6%

zoiets misschien werkt:

function javascript_abort()
{
   throw new Error('This is not an error. This is just to abort javascript');
}

Genomen vanaf hier:

http: / /Vikku.info/codesnippets/javascript/forcing-javascript-to-abort-stop-javascript-execution-at-any-time/


Antwoord 4, Autoriteit 5%

nr.

Zelfs als u een uitzondering gooit, zal het alleen de huidige gebeurtenislus doden. Callbacks die zijn doorgegeven aan SetTimeout of Dom / XMLHTTPREQUEST EVENT-handlers zullen nog steeds lopen wanneer hun tijd komt.


Antwoord 5, Autoriteit 5%

Ik doe:

setTimeout(function() { debugger; }, 5000)

Op deze manier heb ik 5 seconden om te communiceren met UI en vervolgens in stops. Las tijd die ik gebruikte was toen ik aangepaste tooltip zichtbaar moest verlaten, om wat stylingwijzigingen te doen.


Antwoord 6, Autoriteit 3%

Ik gebruik

return false;

Als ik wil afbreken van JavaScript van het verder naar beneden rennen.


Antwoord 7, Autoriteit 2%

Als u in een functie zit, kunt u het verlaten met return;, maar die niet stopt met de uitvoering van de bovenliggende functie die die functie heeft genoemd.


Antwoord 8, Autoriteit 2%

Je kunt returnvroeg in een functie aanroepen, en die functie stopt in ieder geval met werken. Je kunt ook gewoon throw ''gebruiken om een fout te veroorzaken en het huidige proces te stoppen. Maar deze zullen niet alles stoppen. setTimeouten setIntervalkunnen respectievelijk vertraagde functies en functies maken die met een tijdsinterval worden uitgevoerd. Die zullen blijven lopen. Javascript-gebeurtenissen blijven ook gewoon werken.


Antwoord 9

Definieer een variabele binnen de JavaScript-functie, stel deze variabele in op 1 als u de functie niet wilt uitvoeren en stel deze in op 0 als u deze wilt stoppen

var execute;
function do_something()
{
if (execute == 1)
{
// execute your function
}
else
{
 // do nothing
}
}

Antwoord 10

Het proces is vervelend, maar in Firefox:

  1. Open een leeg tabblad/venster om een nieuwe omgeving voor het script te maken
    van de huidige pagina
  2. Vul die nieuwe omgeving met het uit te voeren script
  3. Activeer het script in de nieuwe omgeving
  4. Sluit (dat wil zeggen, dood) die nieuwe omgeving om …

stop of beëindig JavaScript dit [op een] manier om [dat het] verder voorkomt
Op JavaScript gebaseerde uitvoering vindt plaats zonder de browser opnieuw te laden

Opmerkingen:

  • Stap 4 stopt alleen de uitvoering van JavaScript in die omgeving en niet de scripts van andere vensters
  • De originele pagina wordt niet opnieuw geladen, maar er wordt een nieuw tabblad/venster geladen met het script
  • Als een tabblad/venster wordt gesloten, is alles in die omgeving weg: alle restanten, gedeeltelijke resultaten, code, enz.
  • Resultaten moeten terug migreren naar het bovenliggende venster of een ander venster voor bewaring
  • Om de code opnieuw uit te voeren, moeten de bovenstaande stappen worden herhaald

Andere browsers hebben en gebruiken andere conventies.


Antwoord 11

Ik weet dat dit oud is, maar ik wilde dit doen en ik heb, naar mijn mening, een enigszins verbeterde oplossing voor de throw-antwoorden gevonden. Onderdruk gewoon tijdelijk de foutmeldingen en activeer ze later opnieuw met setTimeout :

setTimeout(function() {
    window.onerror = function(message, url, lineNumber) {  
        return false;
    };
}, 50); // sets a slight delay and then restores normal error reporting
window.onerror = function(message, url, lineNumber) {  
    return true;
};
throw new Error('controlledError');

Other episodes