ধরুন আপনি কোনও লাইব্রেরি বজায় রেখেছেন যা কোনও ফাংশন প্রকাশ করে getData
। আপনার ব্যবহারকারীরা প্রকৃত ডেটা পেতে এটি কল করে:
var output = getData();
হুডের নীচে কোনও ফাইলে ডেটা সংরক্ষণ করা হয় যাতে আপনি getData
বিল্ট-ইন নোড.জেস ব্যবহার করে প্রয়োগ করেছিলেন fs.readFileSync
। এটি উভয়ই সুস্পষ্ট getData
এবং fs.readFileSync
সিঙ্ক ফাংশন। একদিন আপনাকে অন্তর্নিহিত ডেটা উত্সকে মঙ্গোডিবি এর মতো একটি রেপোতে স্যুইচ করতে বলা হয়েছিল যা কেবলমাত্র তাত্পর্যপূর্ণভাবে অ্যাক্সেস করা যায়। আপনাকে আপনার ব্যবহারকারীদের বিস্ফোরিত হওয়া এড়াতে বলা হয়েছিল, getData
কেবল প্রতিশ্রুতি ফিরে আসতে বা একটি কলব্যাক প্যারামিটার দাবি করার জন্য এপিআই পরিবর্তন করা যাবে না। আপনি উভয় প্রয়োজনীয়তা কিভাবে পূরণ করবেন?
কলব্যাক / প্রতিশ্রুতি ব্যবহার করে অ্যাসিঙ্ক্রোনাস ফাংশন হ'ল জাভাস্রিপ্ট এবং নোড.জেএস এর ডিএনএ is যে কোনও অ-তুচ্ছ জেএস অ্যাপ্লিকেশন সম্ভবত এই কোডিং শৈলীর সাথে জড়িত। তবে এই অনুশীলনটি সহজেই ডুমের ডাকা পিরামিড তথাকথিত কলব্যাকের দিকে নিয়ে যেতে পারে। আরও খারাপ, কল চেইনের কোনও কলারের কোনও কোড যদি অ্যাসিঙ্ক ফাংশনের ফলাফলের উপর নির্ভর করে তবে সেই কোডগুলিকে কলব্যাক ফাংশনেও আবৃত করতে হবে, কলারের উপর কোডিং শৈলীর সীমাবদ্ধতা চাপিয়ে দেওয়া উচিত। সময়ে সময়ে আমি বিশাল বৈশ্বিক পুনঃ-ফ্যাক্টরিং এড়ানোর জন্য একটি সিঙ্ক ফাংশনে একটি অ্যাসিঙ্ক ফাংশন (প্রায়শই একটি তৃতীয় পক্ষের লাইব্রেরিতে সরবরাহ করা হয়) সজ্জিত করার প্রয়োজনীয়তাটি পাই। এই বিষয়ে কোনও সমাধান অনুসন্ধান করা সাধারণত নোড ফাইবার্সের সাথে শেষ হয়বা এটি থেকে প্রাপ্ত এনপিএম প্যাকেজগুলি। তবে ফাইবাররা কেবল আমার যে সমস্যার মুখোমুখি হচ্ছে তা সমাধান করতে পারে না। এমনকি ফাইবার্সের লেখক যে উদাহরণ দিয়েছেন তার ঘাটতি তুলে ধরে:
...
Fiber(function() {
console.log('wait... ' + new Date);
sleep(1000);
console.log('ok... ' + new Date);
}).run();
console.log('back in main');
আসল আউটপুট:
wait... Fri Jan 21 2011 22:42:04 GMT+0900 (JST)
back in main
ok... Fri Jan 21 2011 22:42:05 GMT+0900 (JST)
যদি ফাংশন ফাইবার সত্যই অ্যাসিঙ্ক ফাংশন স্লিপকে সিঙ্ক করে দেয়, আউটপুটটি হওয়া উচিত:
wait... Fri Jan 21 2011 22:42:04 GMT+0900 (JST)
ok... Fri Jan 21 2011 22:42:05 GMT+0900 (JST)
back in main
আমি জেএসফিডেলে আরেকটি সহজ উদাহরণ তৈরি করেছি এবং প্রত্যাশিত আউটপুট উপার্জনের কোড সন্ধান করছি। আমি এমন একটি সমাধান গ্রহণ করব যা কেবল নোড.জেজে কাজ করে যাতে আপনি জেএসফিডেলে কাজ না করে যে কোনও এনপিএম প্যাকেজের প্রয়োজন মুক্ত।