जावास्क्रिप्ट में स्क्रिप्ट कैसे समाप्त करें?


149

मैं PHP की तरह जावास्क्रिप्ट स्क्रिप्ट से कैसे बाहर निकल सकता हूं exitया die? मुझे पता है कि यह सबसे अच्छा प्रोग्रामिंग अभ्यास नहीं है, लेकिन मुझे इसकी आवश्यकता है।


1
क्या आपको लगता है कि आप इस आवश्यकता पर विस्तार कर सकते हैं, वास्तव में आप इसे प्राप्त करने की कोशिश क्यों कर रहे हैं?
andynormancx

8
@andynormancx, यह डीबगिंग के लिए उपयोगी हो सकता है।
सेट करें

3
बस return;आपकी आवश्यकताओं के आधार पर पर्याप्त हो सकता है, कोई मापदंडों के साथ मर () की तरह कार्य करता है।
इशिकावा

2
यदि आपको इसकी आवश्यकता है, तो आप अपने डिज़ाइन को पुनर्विचार करने से बेहतर हो सकते हैं।
फ्रूंगी

18
हमेशा पहला सवाल 'क्यों' होता है?
जॉन कित्जिक

जवाबों:


80

जावास्क्रिप्ट PHP के लिए बराबर हैdie । BTW यह सिर्फ कॉल exit()(धन्यवाद 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 '';
}

1
यहाँ से बाहर निकलने का स्रोत कोड है: kevin.vanzonneveld.net/techblog/article/…
splattne

यह कोड फायरिंग से तत्वों पर घटनाओं को रोकने के लिए प्रकट नहीं होता है, बस खिड़की की घटनाओं। तो आपको पेज पर सभी तत्वों के माध्यम से लूप करने की आवश्यकता होगी जो कुछ समान कर रहे हैं। यह सब एक बहुत ही अजीब आवश्यकता की तरह लगता है।
andynormancx

2
संपूर्ण डाई कॉन्सेप्ट थोड़ा टूटा हुआ है - प्रवाह किसी भी और सभी घटनाओं को संभालने में सक्षम होना चाहिए, चाहे वह पुनः प्रयास करें या नहीं।
अन्नकूट

मुझे लगता है कि आपने उन सभी घटनाओं को शामिल नहीं किया है जिन्हें संभालना चाहिए, जैसे "चयनकर्ता" घटना।
ओनो ओगामी

4
आप XMLHttpRequest हैंडलर्स को रोक नहीं सकते। वर्तमान कोड अंतराल या टाइमआउट को क्रियान्वित करने से नहीं रोकता है। डेमो: jsfiddle.net/skibulk/wdxrtvus/1 आप इसे एक फिक्स के रूप में मान सकते हैं: stackoverflow.com/a/8860203/6465140
skibulk

73

"बाहर निकलें" फ़ंक्शन आमतौर पर पैरामी के रूप में एक त्रुटि संदेश के साथ कार्यक्रम या स्क्रिप्ट को छोड़ देते हैं। उदाहरण के लिए php में डाई (...)

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

JS में समतुल्य इस तरह से फेंक कीवर्ड के साथ एक त्रुटि का संकेत है :

throw new Error();

आप इसे आसानी से परख सकते हैं:

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

x
>>>undefined
m
>>>100

46
@Sydwell: यदि आप इसे पकड़ ब्लॉक से घेरते हैं, तो यह पकड़ा जाएगा और कार्यक्रम समाप्त नहीं होगा, यहां बिंदु को धता बताते हुए।
परम

4
यह मत भूलो कि आप त्रुटि में एक संदेश जोड़ सकते हैं: नई त्रुटि फेंकें ('चर =' + x); जब आप इस पर काम कर रहे हों तो किसी स्क्रिप्ट को जल्दी खत्म करने का अच्छा तरीका है और एक वैरिएबल का मूल्य प्राप्त कर सकते हैं।
एंड्रयू स्विफ्ट

1
@ कुलमिलाकर मुझे लगता है कि #Swellwell पूरी स्क्रिप्ट को ट्राई / कैच में लपेटने की सलाह देता है, इसलिए आपको जरूरत पड़ने पर a) क्लीन एग्जिट b) संभव अपवाद संदेश मिल सकता है :) बिना सोचे-समझे अपवादों को फेंकना आमतौर पर कोई अच्छा नहीं लाता है :)
jave.web

47

यहां तक ​​कि हैंडल, ईवेंट और इस तरह के सरल कार्यक्रमों में भी, कोड को "मुख्य" फ़ंक्शन में रखना सबसे अच्छा है, भले ही यह एकमात्र प्रक्रिया हो:

<script> 
function main()
{
//code

}
main();
</script>

इस तरह, जब आप प्रोग्राम को रोकना चाहते हैं तो आप "रिटर्न" का उपयोग कर सकते हैं।


15

अगर आपको परवाह नहीं है कि यह सिर्फ एक त्रुटि है:

fail;

यह आपके मुख्य (वैश्विक) कोड को आगे बढ़ने से रोक देगा। डिबगिंग / परीक्षण के कुछ पहलुओं के लिए उपयोगी है।


1
window.failवर्तमान ब्राउज़रों में परिभाषित नहीं किया गया है।
मिकमेकाना

7
यह बिंदु है - आप भी कर सकते हैं mikeyMouse;- त्रुटि समाप्त हो जाएगी। यह जल्दी और गंदा है।
मार्क

1
आह निष्पक्ष पर्याप्त - शायद अपने जवाब में जोड़ सकते हैं?
मिकमेकाना

13

जेएस या नोड स्क्रिप्ट से बाहर निकलने के कई तरीके हैं । यहाँ सबसे अधिक प्रासंगिक हैं:

// 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);

यदि आप REPL में हैं (यानी nodeकमांड लाइन पर चलने के बाद ), तो आप .exitबाहर निकलने के लिए टाइप कर सकते हैं ।


मैं एक परिचित को समझाते हुए पाठकों की बुद्धिमत्ता का अपमान नहीं करना चाहता था जो इसे Googling के पहले परिणाम के रूप में दिखाता है। मेरा सुझाव है कि आप जावास्क्रिप्ट कोड को REPL कमांड के साथ न मिलाएं क्योंकि यदि कोई उपयोगकर्ता उस कोड को कॉपी / पेस्ट करता है और उसे चलाता है, तो उन्हें ".exit" लाइन पर एक सिंटैक्स त्रुटि मिलेगी।
दान डैस्कलेस्क्यू

6

मेरे मामले में मैंने window.stopएपीआई का उपयोग किया है जो आपके ब्राउज़र पर एक्स बटन पर क्लिक करने जैसा है:

window.stop();

5

debugger;कीवर्ड को अपने जावास्क्रिप्ट कोड में रखें जहाँ आप निष्पादन को रोकना चाहते हैं। फिर अपने पसंदीदा ब्राउज़र के डेवलपर टूल खोलें और पृष्ठ को फिर से लोड करें। अब इसे अपने आप विराम देना चाहिए। अपने टूल के स्रोत अनुभाग खोलें : debugger;कीवर्ड हाइलाइट किया गया है और आपके पास स्क्रिप्ट निष्पादन को फिर से शुरू करने का विकल्प है।

मुझे उम्मीद है यह मदद करेगा।

अधिक जानकारी पर:


2

मुझे लगता है कि इस सवाल का जवाब दिया गया है, अधिक जानकारी के लिए यहां क्लिक करें । नीचे संक्षिप्त उत्तर दिया गया है।

throw new Error("Stop script");

ब्रेक पॉइंट्स को जोड़ने के लिए आप अपने ब्राउज़र का उपयोग भी कर सकते हैं, प्रत्येक ब्राउज़र समान है, अपने ब्राउज़र के लिए नीचे दी गई जानकारी की जाँच करें।

Chrome विराम बिंदु जानकारी के लिए यहां क्लिक करें
फ़ायरफ़ॉक्स विराम बिंदु जानकारी के लिए यहां क्लिक करें
एक्सप्लोरर विराम बिंदु जानकारी के लिए क्लिक करें
फ़ॉर सफारी विराम बिंदु जानकारी क्लिक करें


1

यदि आप किसी पृष्ठ पर सभी जावास्क्रिप्ट के जबरन निष्पादन को समाप्त करने का एक तरीका खोज रहे हैं, तो मुझे यकीन नहीं है कि ऐसा करने के लिए आधिकारिक तौर पर स्वीकृत तरीका है - ऐसा लगता है कि सुरक्षा जोखिम हो सकता है (हालांकि सच कहूं, तो मैं यह नहीं सोच सकता कि यह मेरे सिर के ऊपर से कैसे होगा)। सामान्य रूप से जावास्क्रिप्ट में जब आप चाहते हैं कि आपका कोड चलना बंद हो जाए, तो आप बस returnजो भी कार्य निष्पादित कर रहे हैं, उससे। ( returnकथन वैकल्पिक है यदि यह फ़ंक्शन में अंतिम चीज है और फ़ंक्शन को कोई मान नहीं लौटना चाहिए) यदि कोई कारण है जो आपके लिए पर्याप्त नहीं है, तो आपको संभवतः इस प्रश्न में अधिक विवरण संपादित करना चाहिए कि आप क्यों सोचते हैं आपको इसकी आवश्यकता है और शायद कोई वैकल्पिक समाधान प्रस्तुत कर सकता है।

ध्यान दें कि व्यवहार में, अधिकांश ब्राउज़रों के जावास्क्रिप्ट दुभाषिए केवल वर्तमान स्क्रिप्ट को चलाना बंद कर देंगे यदि वे एक त्रुटि का सामना करते हैं। तो आप कुछ ऐसा कर सकते हैं जैसे कि एक परेशान वैरिएबल की विशेषता तक पहुँचना:

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

और यह शायद स्क्रिप्ट को निरस्त कर देगा । लेकिन आपको उस पर भरोसा नहीं करना चाहिए क्योंकि यह बिल्कुल भी मानक नहीं है, और यह वास्तव में एक भयानक अभ्यास की तरह लगता है।

संपादित करें : ठीक है, शायद यह इतना अच्छा जवाब नहीं था आलफुर के प्रकाश में। हालाँकि die()वह जिस फ़ंक्शन से जुड़ा था वह मूल रूप से मेरे दूसरे पैराग्राफ को लागू करता है, यानी यह सिर्फ एक त्रुटि फेंकता है।


1
वह सब होगा जो स्क्रिप्टिंग के वर्तमान निष्पादन को रोक देगा। यह स्क्रिप्ट के नए बिट्स को फायर करने और चलाने से नई घटनाओं को नहीं रोकेगा।
andynormancx

उल्लेख नहीं करने के लिए, आपको एक त्रुटि को फेंकने के लिए अतिरिक्त खराब फ़ंक्शन की आवश्यकता नहीं है। जावास्क्रिप्ट में एक अंतर्निहित थ्रो स्टेटमेंट है।
क्रिस

डाई फ़ंक्शन आपके p.blah () की तुलना में बहुत अधिक करता है, यह विंडोज़ ईवेंट के माध्यम से चलता है और उन हैंडल को "e.preventDefault (); e.stopPropagation ();" से बदल देता है, जिससे ईवेंट बंद हो जाएंगे। फिर यह एक अपवाद फेंकता है।
andynormancx

1

फेंकना "";

अवधारणा का दुरुपयोग है, लेकिन शायद एकमात्र विकल्प है। और, हां, आपको सभी इवेंट श्रोताओं को रीसेट करना होगा, जैसे स्वीकृत उत्तर उल्लेख। यदि मुझे सही लगता है तो आपको प्रवेश के एकल बिंदु की भी आवश्यकता होगी।

इसके शीर्ष पर: आप एक ऐसा पेज चाहते हैं जो आपके ईमेल पर रिपोर्ट करता है जैसे ही यह फेंकता है - आप इसके लिए रेवेन / संतरी का उपयोग कर सकते हैं। लेकिन इसका मतलब है कि, आप अपने आप को गलत सकारात्मक बनाते हैं। ऐसे मामले में, आपको ऐसी घटनाओं को फ़िल्टर करने के लिए डिफ़ॉल्ट हैंडलर को भी अपडेट करना होगा या सेंट्री के डैशबोर्ड पर इस तरह की घटनाओं को अनदेखा करना होगा।

window.stop ();

यह पृष्ठ के लोडिंग के दौरान काम नहीं करता है। यह पेज को भी डिकोड करना बंद कर देता है। तो आप वास्तव में इसका उपयोग उपयोगकर्ता को अपने पेज के जावास्क्रिप्ट-मुक्त संस्करण की पेशकश करने के लिए नहीं कर सकते।

डिबगर;

केवल डिबगर खोले जाने पर स्टॉप निष्पादन। महान काम करता है, लेकिन एक वितरण योग्य नहीं है।


1

जावास्क्रिप्ट में कई तरीके हैं, नीचे उनमें से कुछ हैं

विधि 1:

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

विधि 2:

return;

विधि 3:

return false;

विधि 4:

new new

विधि 5:

अपने कस्टम फ़ंक्शन को विधि से ऊपर लिखें और जहाँ आपको आवश्यकता हो, कॉल करें

नोट: यदि आप कोड निष्पादन को रोकना चाहते हैं तो आप इसका उपयोग कर सकते हैं

debugger; 

0

यह छोटा सा फ़ंक्शन PHP के बाहर निकलने () की नकल करने के लिए बहुत करीब आता है। अन्य समाधानों की तरह, कुछ और न जोड़ें।

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

0

बस एक BOOL स्थिति बनाएँ, यहाँ जटिल कोड की कोई आवश्यकता नहीं है।

अगर एक बार भी आप इसे सच / या कई बार मोड़ लेते हैं, तो यह आपको समाधान की एक पंक्ति देगा / एकाधिक नहीं - मूल रूप से सरल।


0

यदि आप स्क्रिप्ट में किसी अपरिभाषित फ़ंक्शन का उपयोग करते हैं, तो स्क्रिप्ट "अनक्रेडेड रेफरेंस" के कारण बंद हो जाएगा। मैंने निम्नलिखित कोड और पहले दो पंक्तियों को निष्पादित करके कोशिश की है।

मुझे लगता है, यह स्क्रिप्ट को रोकने का सबसे अच्छा तरीका है। अगर कोई और तरीका है तो मुझे कमेंट करें मैं एक और सबसे अच्छा और सरल तरीका जानना चाहता हूं। BTW, मैं स्क्रिप्ट को समाप्त करने के लिए PHP की तरह जावास्क्रिप्ट में बाहर निकलने या मरने वाले इनबिल्ट फ़ंक्शन नहीं मिला। अगर किसी को पता है तो मुझे बताएं।

alert('Hello');

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

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

alert('bye');

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

0

यदि आप किसी भी त्रुटि को "कोडिंग" के बिना निष्पादित करने से रोकना चाहते हैं, तो आप अस्थायी window.onerrorरूप से दिखाए गए अनुसार ओवरराइड कर सकते हैं 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.");

0

मैं iobroker का उपयोग कर रहा हूं और आसानी से स्क्रिप्ट को रोकने में कामयाब रहा

stopScript();

0

अधिकांश परिस्थितियों में लागू नहीं है, लेकिन मेरे पास ब्राउज़र में चलने वाली बहुत सारी एसिंक्स स्क्रिप्ट हैं और एक हैक के रूप में मैं करता हूं

window.reload();

सब कुछ रोकने के लिए।


0

मुझे पता है कि यह पुराना है, लेकिन अगर आप एक समान PHP die()फ़ंक्शन चाहते हैं , तो आप ऐसा कर सकते हैं:

function die(reason) {
    throw new Error(reason);
}

उपयोग:

console.log("Hello");
die("Exiting script..."); // Kills script right here
console.log("World!");

ऊपर दिया गया उदाहरण केवल "हैलो" प्रिंट करेगा।


-1

मैं निष्पादन को रोकने के लिए कोड के इस टुकड़े का उपयोग करता हूं:

throw new FatalError("!! Stop JS !!");

आपको एक कंसोल त्रुटि मिलेगी, लेकिन यह मेरे लिए अच्छा है।


-2

यह एक उदाहरण है, कि, यदि कोई स्थिति मौजूद है, तो स्क्रिप्ट को समाप्त करें। मैं अपने एसएसई क्लाइंट साइड जावास्क्रिप्ट में इसका उपयोग करता हूं, यदि

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

JSON पार्स से सही नहीं किया जा सकता ...

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

... वैसे भी सामान्य विचार यह है:

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

इससे आपकी जावास्क्रिप्ट स्क्रिप्ट समाप्त हो जाएगी


1
यह वास्तव में सवाल का जवाब नहीं देता है। वे एक सामान्य समस्या के बारे में बात कर रहे हैं, आपके विशिष्ट SSE चर / फ़ाइल के साथ कुछ नहीं करना है।
mjk

1
mjk - अब बेहतर है?
कप्पड़

-3

मैं थ्रो के बजाय रिटर्न स्टेटमेंट का उपयोग करता हूं क्योंकि थ्रो कंसोल में त्रुटि देता है। सबसे अच्छा तरीका यह है कि हालत की जाँच करें

if(condition){
 return //whatever you want to return
}

यह बस कंसोल में किसी भी त्रुटि देने के बजाय, उस लाइन से प्रोग्राम का निष्पादन रोक देता है।


1
हालाँकि, यह आपके लिंटर में "फ़ंक्शन के बाहर 'वापसी' का उपयोग नहीं कर सकता" के रूप में त्रुटि देता है
Carles Alcolea

यह निष्पादन को रोक देता है क्योंकि कथन अमान्य है। आप भी उपयोग if (condition) { new new }कर सकते हैं या if (condition) { purpleMonkeyDishwasher(); }
कोडर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.