কলব্যাকগুলি ব্যবহার করার সময় জাভাস্ক্রিপ্ট কোড কীভাবে অবিচ্ছিন্ন হয়ে যায়?


26

আমি অ্যাসিঙ্ক্রোনাস জাভাস্ক্রিপ্ট কোড কীভাবে লিখব তা বোঝার চেষ্টা করে অনলাইনে প্রচুর পড়া করছি। আমার গবেষণায় যে কৌশলগুলি প্রচুর পরিমাণে এসেছে তা হ'ল কলব্যাকগুলি ব্যবহার করা। আমি কীভাবে কলব্যাক ফাংশনটি লিখতে এবং চালিত করব তার প্রক্রিয়াটি বুঝতে পেরে আমি কেন বিভ্রান্ত হয়ে পড়েছি কেন কলব্যাকগুলি স্বয়ংক্রিয়ভাবে জাভাস্ক্রিপ্টের কার্যকরকরণকে অবিচ্ছিন্ন করে তোলে। সুতরাং, আমার প্রশ্নটি হল: আমার জাভাস্ক্রিপ্ট কোডটিতে কলব্যাক ফাংশনগুলিতে যুক্তকরণ কোডটিকে স্বয়ংক্রিয়ভাবে অ্যাসিঙ্ক হিসাবে কীভাবে যুক্ত করে?



@Jalayn। ধন্যবাদ। আপনার মন্তব্য বেশ কয়েকটি উত্তর পড়ার পরে সমস্ত পার্থক্য করেছে।
কুশলভম

উত্তর:


26

এটা হয় না। কেবল একটি কলব্যাক নেওয়া বা কলব্যাক পাস করার অর্থ এটি অ্যাসিনক্রোনাস।

উদাহরণস্বরূপ, .forEachফাংশনটি একটি কলব্যাক নেয় তবে সিঙ্ক্রোনাস।

var available = false;
[1,2,3].forEach( function(){
    available = true;
});
//code here runs after the whole .forEach has run,
//so available === true here

setTimeoutখুব কলব্যাক নেয় এবং অ্যাসিঙ্ক্রোনাস হয়।

function myFunction( fn ) {
    setTimeout( function() {
        fn(1,2,3);
    }, 0 );
}

var available = false;
myFunction( function() {
    available = true;
});
//available is never true here

জাভাস্ক্রিপ্টের যে কোনও অ্যাসিঙ্ক্রোনাস ইভেন্টের প্রতি ঝুঁকির জন্য সর্বদা একটি কলব্যাকের প্রয়োজন হয় তবে এর অর্থ এই নয় যে ফাংশনগুলি কল করা বা তাদের চারপাশে পাস করা সর্বদা অবিচ্ছিন্ন।


2
@ স্টিভেভার্স আমার ধারণা আপনি তখন এমডিএন নিবন্ধটি সম্পাদনা করতে পারেন । জাভাস্ক্রিপ্টে কলব্যাক হ'ল একটি সাধারণ শব্দ যা অন্য কোনও ফাংশনে পাস হয়েছে যা আপনাকে প্রদত্ত ফাংশনটি ব্যবহার করে আপনাকে আবার কল করে ... কেন এটি জটিল? সম্পাদনা: কলব্যাক এছাড়াও ব্যবহার করা হয় চশমা
Esailija

3
@ স্টিওয়েভার্স "কলব্যাক ইঙ্গিত করে asyncrony" একটি সি # / মাইক্রোসফ্ট আইডিয়োসিএনক্রসি।
en.wikedia.org/wiki/Callback_( কম্পিউটার_প্রগ্রামিং

1
@ মাইক্রব্রাউন আমি অনুমান করি যে আমি তার প্রোফাইলে খুব বেশি পড়েছি এবং এটি - সর্বাধিক উত্সাহিত উত্তর অবশ্যই একটি ধারণা দেয় যে " কলব্যাকস অ্যাসিনক্রোনিকে বোঝায়"।
ইসাইলাইজা

1
তবে @ স্টিওভার্স বলাও ভুল is কলব্যাকগুলি অ্যাসিঙ্ক্রোনিকে বোঝায় না, কেবল অন্য কেউ "ফিরে আসার" জন্য দায়বদ্ধ হবে।
মাইকেল ব্রাউন

1
+1 কারণ স্টিভ
এভারসটি

23

"যাদু" এর রহস্যটি হ'ল আপনি যে ইভেন্টগুলিকে কলব্যাকগুলি বরাদ্দ করছেন তা অবিচ্ছিন্ন। জেএস স্যান্ডবক্সের বাইরে, ব্যাকগ্রাউন্ডে তারা যা কিছু করছে (যেমন রিমোট সার্ভার থেকে কিছু উদ্ধার করা) তার যত্ন নিতে তারা "হুডের নীচে" প্রয়োগ করা হয়েছে। এবং তারপরে তাদের কাজটি শেষ হয়ে গেলে তারা জেএস ইঞ্জিনকে একটি ইভেন্ট বলার বার্তা দেয়। জেএস ইঞ্জিনটি বর্তমানে যা কিছু করছে তা শেষ করে, এটি সারিবদ্ধ থাকা যে কোনও ইভেন্টগুলিতে কল করবে (বা কোনও নতুন বার্তার জন্য অপেক্ষা করবে) এবং তারপরে আপনার কলব্যাকটি "জাদুকরী" হিসাবে অ্যাসিঙ্ক্রোনিকভাবে আহ্বান করা হবে!

( দ্রষ্টব্য: এটি বিষয়টির একটি খুব উচ্চ-স্তরের, ধারণাগত ওভারভিউ যা বিশদে যায় না, কারণ বিভিন্ন জেএস ইঞ্জিনগুলি বিভিন্ন উপায়ে জিনিস বাস্তবায়ন করতে চলেছে But তবে এটি কীভাবে কাজ করে তার সাধারণ ধারণা এটি))


এগুলি কোনটি? এই জাতীয় একটি বা দুটি ইভেন্টের উদাহরণ আপনার উত্তরটিকে আরও ভাল করে তুলবে।
জো স্মু
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.