জেএসে কলব্যাক ফাংশন এবং প্রতিশ্রুতিগুলির মধ্যে পার্থক্য কী এবং কোন ক্ষেত্রে আমাদের এগুলি ব্যবহার করতে হবে?


উত্তর 1:

কলব্যাকগুলি বেশ পুরানো হ্যাক যা এটি করা হয়েছিল কারণ সেই সময় প্রতিশ্রুতি কার্যকর করা হয়নি। 2000 সালের শেষের দিকে জাভাস্ক্রিপ্ট এতটা বিস্ফোরিত হবে বলে কেউ ভাবেনি। প্রতিশ্রুতি ভবিষ্যতের জাভাস্ক্রিপ্টে যাওয়ার উপায় কারণ তারা এখন ES6 স্ট্যান্ডার্ডের অংশ। এই স্ট্যান্ডার্ডটি প্রস্তাবিত হওয়ার আগেও কিছু ভাল লোকেরা প্রতিশ্রুতি প্রতিলিপি করতে "কিউ" এর মতো কিছু ফ্রেমওয়ার্ক কার্যকর করেছিল। সুতরাং অ্যাংুলার 1.x এবং রিএ্যাক্টের মতো বড় ফ্রেমওয়ার্কগুলি ডিফল্টরূপে প্রতিশ্রুতি নিয়ে আসে। আপনি যদি এখনই জাভাস্ক্রিপ্টে কিছু কোড লেখার পরিকল্পনা করছেন তবে সর্বদা প্রতিশ্রুতি ব্যবহার করুন।

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


উত্তর 2:

একটি কলব্যাক একটি ফাংশন যা প্রদত্ত ক্রিয়াকলাপের সমাপ্তিতে ডাকা হয়। এটি কোড ব্লকিং প্রতিরোধ করে।

কলব্যাকগুলির সাথে সুস্পষ্ট সমস্যাগুলির মধ্যে একটি হ'ল যখন আপনার একাধিক অ্যাসিনক্রোনাস অপারেশন একে অপরের উপর নির্ভর করে। সুতরাং, আপনার কলব্যাক থাকবে, কলব্যাকের অভ্যন্তরে নেস্টেড থাকবে, কলব্যাকের অভ্যন্তরে বাসা থাকবে and

ফাংশনটি ইউজারএক্সিস্টস (আইডি, কলব্যাক) {
   getDat database (ফাংশন (ডিবি))
       getUser (ডিবি, 'ব্যবহারকারী', আইডি, ফাংশন (ব্যবহারকারী) {
           var পাওয়া = (ব্যবহারকারীর)? সত্য মিথ্যা;
           কলব্যাক (পাওয়া);
       })
    })
}

অন্যদিকে প্রতিশ্রুতি হ'ল অ্যাসিনক্রোনাস অপারেশনের ফলাফলের প্রতিনিধিত্বকারী বস্তু।

তারা অ্যাসিঙ্ক্রোনাস অপারেশন পরিচালনা করার জন্য আরও ভাল এবং সহজ উপায় সরবরাহ করার জন্য কলব্যাকগুলি ব্যবহার করে এবং নেস্টেড কলব্যাকগুলির সমস্যা (তখন () ব্যবহার করে) সমাধান করে এবং ত্রুটিগুলি হ্যান্ডলিং কম বেদনাদায়ক হয়ে যায় (.error () এবং .catch () ব্যবহার করে)।

ফাংশনটি ইউজারএক্সিস্টস (আইডি) {
    getDatabase () ফিরিয়ে দিন (তারপরে (ফাংশন (ডিবি))
        getUser রিটার্ন (ডিবি, 'ব্যবহারকারী', আইডি);
    })। তারপর (ফাংশন (ব্যবহারকারী) {
        রিটার্ন (ইউজার)? সত্য মিথ্যা;
    catch)। ধরা (ফাংশন (ঙ) {
       // ত্রুটি হ্যান্ডেল
    });
}

// এখন আমরা প্রতিশ্রুতি বস্তু দ্বারা সমাধান করা মান পেতে পারি
// isEserExists () ফাংশনে ততক্ষণে () পদ্ধতিতে ফিরে এসেছিল।
isUserExists.then (ফাংশন (userExists) {
   // পূর্ববর্তী উদাহরণে কলব্যাক () ফাংশনের কাজটি এখানে করুন।
});

// প্রতিজ্ঞা
ফাংশন getDatabase (তথ্য) {
 নতুন প্রতিশ্রুতি ফিরিয়ে দিন (ফাংশন (সমাধান, প্রত্যাখ্যান))
     // যেকোন অ্যাসিনক্রোনাস অপারেশন করুন এবং ত্রুটি ফিরে এসেছে কিনা তা পরীক্ষা করুন
     যদি (ত্রুটি) প্রত্যাখ্যান (ত্রুটি);
     অন্য সমাধান (ডিবি);
 });
}

দ্রষ্টব্য: তত্ক্ষণিক () পদ্ধতিটি একটি প্রতিশ্রুতি দেয়। যদি হ্যান্ডলার পদ্ধতিটি কোনও মান ফেরত দেয়, তবে ততক্ষণে প্রদত্ত প্রতিশ্রুতি তার মান হিসাবে প্রত্যাবর্তিত মানের সাথে সমাধান হয়ে যায়। এবং যদি এটি ইতিমধ্যে সমাধান হওয়া প্রতিশ্রুতি দেয় তবে ততক্ষণে ফিরে আসা প্রতিশ্রুতি () এর প্রতিশ্রুতির মান হিসাবে এর সমাধান হয়ে যায়।