জাভাস্ক্রিপ্টে স্ক্রিপ্টটি কীভাবে শেষ করবেন?


149

আমি কীভাবে জাভাস্ক্রিপ্ট স্ক্রিপ্ট থেকে পিএইচপি এর মতো exitবা প্রস্থান করতে পারি die? আমি জানি এটি সেরা প্রোগ্রামিং অনুশীলন নয় তবে আমার এটি করা দরকার।


1
আপনি কি মনে করেন যে এই প্রয়োজনীয়তাটি আপনি প্রসারিত করতে পারেন, ঠিক আপনি কেন এটি অর্জনের চেষ্টা করছেন?
andynormancx

8
@ এবং নিয়ামনম্যাক্স, এটি ডিবাগিংয়ের জন্য কার্যকর হতে পারে।
সেট

3
return;আপনার প্রয়োজনীয়তার উপর নির্ভর করে কেবল যথেষ্ট হতে পারে, কোনও পরামিতি ছাড়াই ডাই () এর মতো কাজ করে।
ইশিকাওয়া

2
আপনার যদি এটির "প্রয়োজন" হয় তবে আপনার ডিজাইনের পুনর্বিবেচনা করা ভাল।
ফ্রুঙ্গি

18
সর্বদা প্রথম প্রশ্ন 'কেন'?
জন কেটজিক

উত্তর:


80

পিএইচপি'র জন্য জাভাস্ক্রিপ্ট সমতুল্যdieexit()বিটিডাব্লু এটি কেবল কল করে (ধন্যবাদ স্প্ল্যাটনে):

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
এখানে বেরোনোর ​​উত্স কোডটি: কেভিন.ওয়ানজোনভেলভ.net
টেকব্লগ

এই কোডটি উপাদানগুলির ইভেন্টগুলিকে গুলি চালানো থেকে বিরত বলে মনে হচ্ছে না, কেবল উইন্ডোর ইভেন্টগুলি। সুতরাং আপনাকে একই জাতীয় কিছু করার জন্য পৃষ্ঠার সমস্ত উপাদানগুলির মধ্য দিয়ে লুপ করতে হবে। যদিও এটি সমস্ত খুব অদ্ভুত প্রয়োজন মনে হচ্ছে।
andynormancx

2
পুরো ডাই ধারণাটি কিছুটা ভাঙা - প্রবাহটি যে কোনও এবং সমস্ত ঘটনাচক্রে পরিচালনা করতে সক্ষম হওয়া উচিত, তা সেই পরীক্ষার চেষ্টা করুক না কেন।
অন্নাকাটা

আমি মনে করি আপনি পরিচালনা করা উচিত এমন সমস্ত ইভেন্ট যেমন "সিলেক্টস্টার্ট" ইভেন্ট অন্তর্ভুক্ত করেননি।
ওনো ওগামি

4
আপনি এক্সএমএলএইচটিপিপিউইকস্ট হ্যান্ডলারগুলি থামাতে পারবেন না। বর্তমান কোড অন্তর বা সময়সীমা নির্বাহ থেকে থামায় না। ডেমো: jsfiddle.net/skibulk/wdxrtvus/1 আপনি এটি একটি সমাধান হিসাবে বিবেচনা করতে পারেন: stackoverflow.com/a/8860203/6465140
স্কিভুল্ক

73

"প্রস্থান" ফাংশনগুলি সাধারণত প্যারামেট হিসাবে ত্রুটি বার্তার পাশাপাশি প্রোগ্রাম বা স্ক্রিপ্ট থেকে প্রস্থান করে। উদাহরণস্বরূপ পিএইচপি মধ্যে ডাই (...)

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

জেএস-এর সমতুল্য হ'ল থ্রো কীওয়ার্ডটির সাথে ত্রুটি সংকেত দেওয়া :

throw new Error();

আপনি সহজেই এটি পরীক্ষা করতে পারেন:

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

x
>>>undefined
m
>>>100

46
@ সিডওয়েল: আপনি যদি ক্যাচ ব্লকের চারপাশে এটি ঘিরে রাখেন তবে এটি ধরা পড়বে এবং প্রোগ্রামটি শেষ হবে না, এখানে বিষয়টি উল্লেখ করে।
চূড়ান্ত

4
ভুলে যাবেন না যে আপনি ত্রুটিটিতে একটি বার্তা যুক্ত করতে পারেন: নতুন ত্রুটি নিক্ষেপ করুন ('ভেরিয়েবল =' + এক্স); কোনও স্ক্রিপ্টে কাজ করার সময় দ্রুত এটি শেষ করার এবং ভেরিয়েবলের মান পাওয়ার জন্য এটি একটি দুর্দান্ত উপায়।
অ্যান্ড্রু সুইফট

1
@ সর্বশেষে আমি মনে করি যে # সিডওয়েল মেইন পুরো স্ক্রিপ্টটি চেষ্টা / ধরার জন্য আবদ্ধ করতে পারেন, যাতে আপনি একটি) পরিষ্কার প্রস্থান পেতে পারেন খ) সম্ভাব্য ব্যতিক্রম বার্তা যখন প্রয়োজন তখন :) অচেতন ব্যতিক্রম নিক্ষেপ করা সাধারণত কোনও ভাল আনতে পারে না :)
জাভ.ওয়েব

47

এমনকি হ্যান্ডলগুলি, ইভেন্টগুলি এবং এগুলি ছাড়া সহজ প্রোগ্রামগুলিতে, "মূল" ফাংশনে কোড রাখা ভাল, এমনকি যদি এটি একমাত্র প্রক্রিয়া হয়:

<script> 
function main()
{
//code

}
main();
</script>

এইভাবে, আপনি যখন প্রোগ্রামটি থামাতে চান আপনি "রিটার্ন" ব্যবহার করতে পারেন।


15

আপনি যদি যত্ন না নেন তবে এটি কেবল একটি ত্রুটি লিখুন:

fail;

এটি আপনার মূল (গ্লোবাল) কোডটি এগিয়ে যাওয়া থেকে বিরত রাখবে। ডিবাগিং / পরীক্ষার কয়েকটি দিকের জন্য কার্যকর Use


1
window.failবর্তমান ব্রাউজারগুলিতে সংজ্ঞায়িত করা হয়নি।
মাইকমেকানা

7
মূল বিষয় - আপনি এটি করতেও পারেন mikeyMouse;- ত্রুটিটি শেষ হয়ে যাবে। এটি দ্রুত এবং নোংরা।
মার্ক 11

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প্রস্থান করতে টাইপ করতে পারেন ।


গুগলিংয়ের প্রথম ফলাফল হিসাবে প্রদর্শিত একটি সংক্ষিপ্ত বিবরণ ব্যাখ্যা করে আমি পাঠকদের বুদ্ধি অবমাননা করতে চাইনি। আমি আপনাকে জাভাস্ক্রিপ্ট কোডটি আরপিএল কমান্ডের সাথে মিশ্রিত করার পরামর্শ দিচ্ছি না কারণ যদি কোনও ব্যবহারকারী সেই কোডটি ব্লক করে অনুলিপি করে এবং এটি চালায় তবে তারা ".exit" লাইনে একটি সিনট্যাক্স ত্রুটি পাবেন।
ড্যান ড্যাসকলেসকু

6

আমার ক্ষেত্রে আমি window.stopএপিআই ব্যবহার করেছি যা আপনার ব্রাউজারে এক্স বোতামটি ক্লিক করার মতো:

window.stop();

5

debugger;আপনি জাভাস্ক্রিপ্ট কোডে কীওয়ার্ডটি রাখুন যেখানে আপনি কার্য সম্পাদন থামাতে চান। তারপরে আপনার প্রিয় ব্রাউজারের বিকাশকারী সরঞ্জামগুলি খুলুন এবং পৃষ্ঠাটি পুনরায় লোড করুন। এখন এটি স্বয়ংক্রিয়ভাবে বিরতি দেওয়া উচিত। আপনার সরঞ্জামগুলির উত্স বিভাগটি খুলুন : debugger;কীওয়ার্ডটি হাইলাইট করা হয়েছে এবং আপনার কাছে স্ক্রিপ্টের সম্পাদনা পুনরায় শুরু করার বিকল্প রয়েছে।

আমি আসা করি এটা সাহায্য করবে.

আরও তথ্য এখানে:


2

আমি মনে করি এই প্রশ্নের উত্তর দেওয়া হয়েছে, ক্লিক এখানে আরও তথ্যের জন্য। নীচে এটি পোস্ট করা হয়েছে সংক্ষিপ্ত উত্তর।

throw new Error("Stop script");

ব্রেক পয়েন্ট যুক্ত করতে আপনি আপনার ব্রাউজারটি ব্যবহার করতে পারেন, প্রতিটি ব্রাউজার একই হয়, আপনার ব্রাউজারের জন্য নীচে তথ্য চেক করুন।

ক্রোম বিরতি পয়েন্ট তথ্যের জন্য ক্লিক করুন এখানে
ফায়ারফক্স বিরতি পয়েন্ট তথ্যের জন্য ক্লিক করুন এখানে
এক্সপ্লোরার বিরতি পয়েন্ট তথ্যের জন্য ক্লিক
সাফারি বিরতি পয়েন্ট তথ্য CLICK এর জন্য এখানে


1

আপনি যদি কোনও পৃষ্ঠায় সমস্ত জাভাস্ক্রিপ্টের জোর করে প্রয়োগ কার্যকর করার উপায় খুঁজছেন তবে আমি নিশ্চিত নই যে এটি করার জন্য কোনও আনুষ্ঠানিক অনুমোদন দেওয়া উপায় আছে - এটি এমন ধরণের জিনিস বলে মনে হচ্ছে যা সুরক্ষার ঝুঁকি হতে পারে (যদিও সত্যি কথা বলুন, কীভাবে এটি আমার মাথার উপরের অংশে থাকবে তা আমি ভাবতে পারি না) সাধারণত জাভাস্ক্রিপ্টে আপনি যখন নিজের কোডটি চালানো বন্ধ করতে চান, আপনি returnযে কোনও ফাংশন সম্পাদন করছেন তা থেকে আপনি । ( returnবিবৃতিটি alচ্ছিক যদি এটি ফাংশনটির শেষ জিনিস এবং ফাংশনটি কোনও মূল্য ফেরত না দেয়) যদি ফিরে আসার কোনও কারণ আপনার পক্ষে যথেষ্ট ভাল না হয়, তবে সম্ভবত আপনার কেন মনে হয় এই প্রশ্নে আরও বিশদ সম্পাদনা করা উচিত আপনার এটি প্রয়োজন এবং সম্ভবত কেউ বিকল্প সমাধান দিতে পারেন।

মনে রাখবেন যে অনুশীলনে, বেশিরভাগ ব্রাউজারের জাভাস্ক্রিপ্ট দোভাষী তাদের কোনও ত্রুটির সম্মুখীন হলে কেবল বর্তমান স্ক্রিপ্টটি চালানো বন্ধ করবে। সুতরাং আপনি আনসেট ভেরিয়েবলের একটি বৈশিষ্ট্য অ্যাক্সেস করার মতো কিছু করতে পারেন:

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

এবং এটি সম্ভবত স্ক্রিপ্টটি বাতিল করে দেবে। তবে আপনার এটির উপর নির্ভর করা উচিত নয় কারণ এটি মোটামুটি মানসম্পন্ন নয় এবং এটি সত্যিই একটি ভয়াবহ অনুশীলনের মতো বলে মনে হচ্ছে।

সম্পাদনা : ঠিক আছে, ইলাফুরের আলোকে হয়তো এটি এত ভাল উত্তর ছিল না। যদিও die()তিনি যে ফাংশনটির সাথে তিনি যুক্ত ছিলেন সেটি মূলত আমার দ্বিতীয় অনুচ্ছেদটি প্রয়োগ করে, এটি কেবল একটি ত্রুটি ছুঁড়ে।


1
যা কিছু করবে তা বর্তমান নির্বাহী বিটকে স্ক্রিপ্টিং বন্ধ করবে। এটি নতুন ইভেন্টগুলিকে গুলি চালানো এবং স্ক্রিপ্টের নতুন বিটগুলি চালানো থেকে বিরত রাখবে না।
andynormancx

উল্লেখ করার দরকার নেই, ত্রুটি ছুঁড়ে ফেলার জন্য আপনার অতিরিক্ত খারাপ ফাংশনের প্রয়োজন নেই। জাভাস্ক্রিপ্টের একটি বিল্ট-ইন থ্রো স্টেটমেন্ট রয়েছে।
ক্রিস

ডাই ফাংশনটি আপনার পি.বি.এল. () এর চেয়ে অনেক বেশি কাজ করে, এটি উইন্ডো ইভেন্টগুলির মধ্য দিয়ে চলে এবং তাদের "হ'ল হ্যান্ডলগুলি" 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

এই সামান্য ফাংশনটি পিএইচপি-র প্রস্থান () নকল করার খুব কাছাকাছি আসে। অন্যান্য সমাধানগুলির মতো, অন্য কিছু যুক্ত করবেন না।

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

0

কেবল একটি BOOL শর্ত তৈরি করুন, এখানে জটিল কোডের প্রয়োজন নেই ..

এমনকি যদি আপনি একবারে এটি সত্য / বা একাধিকবার পরিণত করেন তবে এটি উভয়ই আপনাকে এক লাইনের সমাধান দেবে / একাধিক নয় - মূলত এটি সহজ।


0

আপনি যদি স্ক্রিপ্টে কোনও অপরিজ্ঞাত ফাংশন ব্যবহার করেন তবে স্ক্রিপ্ট "আনকচড রেফারেন্স এরির" এর কারণে বন্ধ হয়ে যাবে। আমি কোডটি অনুসরণ করে চেষ্টা করেছি এবং প্রথম দুটি লাইন কার্যকর করেছি।

আমি মনে করি, এটি স্ক্রিপ্ট বন্ধ করার সেরা উপায়। যদি অন্য কোনও উপায় থাকে তবে দয়া করে আমাকে মন্তব্য করুন। আমি আরও একটি সেরা এবং সহজ উপায় জানতে চাই। বিটিডাব্লু, স্ক্রিপ্টটি সমাপ্ত করার জন্য আমি পিএইচপি-র মতো জাভাস্ক্রিপ্টে প্রস্থান বা মরণ ইনবিল্ট ফাংশন পাইনি। যদি কেউ জানেন তবে দয়া করে আমাকে জানান let

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

আমি আইব্রোকার ব্যবহার করছি এবং সহজেই স্ক্রিপ্টটি থামাতে সক্ষম হয়েছি

stopScript();

0

বেশিরভাগ পরিস্থিতিতে প্রযোজ্য নয়, তবে আমার ব্রাউজারে এবং হ্যাক হিসাবে প্রচুর অ্যাসিঙ্ক স্ক্রিপ্ট চালু ছিল

window.reload();

সবকিছু বন্ধ করতে।


0

আমি জানি এটি পুরানো, তবে আপনি যদি এই জাতীয় পিএইচপি 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>

জেএসএন পার্স থেকে সরাসরি ক্যানট পার্স করা যায় ...

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
এটি আসলে প্রশ্নের উত্তর দেয় না। তারা একটি সাধারণ সমস্যার কথা বলছেন, আপনার নির্দিষ্ট এসএসই ভেরিয়েবল / ফাইলের সাথে কিছুই করার নেই।
mjk

1
mjk - এখন ভাল?
কাপাদ

-3

আমি থ্রো পরিবর্তে রিটার্ন স্টেটমেন্ট ব্যবহার করি কনসোলে ত্রুটি দেয়। এটি করার সর্বোত্তম উপায় হ'ল শর্তটি পরীক্ষা করা

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

এটি কনসোলে কোনও ত্রুটি না দিয়ে কেবল সেই লাইন থেকে প্রোগ্রামটির সম্পাদন বন্ধ করে দেয়।


1
তবে এটি আপনার লিটারগুলিতে ত্রুটিটি দেয় "" ফাংশনের বাইরে 'রিটার্ন' ব্যবহার করতে পারি না "
কার্লস অ্যালকোলেয়া

এটি কার্যকর করা বন্ধ করে দেয় কারণ বিবৃতিটি অবৈধ। আপনি ব্যবহার করতে পারেন if (condition) { new new }বা if (condition) { purpleMonkeyDishwasher(); }
কোডার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.