নোডেজ অ্যাসিঙ্ক মডিউল: https://github.com/caolan/async 2 অনুরূপ পদ্ধতি সরবরাহ করে async.waterfallএবং async.series।
তাদের মধ্যে পার্থক্য কী?
নোডেজ অ্যাসিঙ্ক মডিউল: https://github.com/caolan/async 2 অনুরূপ পদ্ধতি সরবরাহ করে async.waterfallএবং async.series।
তাদের মধ্যে পার্থক্য কী?
উত্তর:
এটি প্রদর্শিত হয় যা async.waterfallপ্রতিটি ফাংশনকে তার ফলাফলগুলি পরবর্তী ফাংশনে async.seriesপাস করার অনুমতি দেয়, যখন সমস্ত ফলাফল চূড়ান্ত কলব্যাকে পাস করে। উচ্চতর স্তরে, async.waterfallএকটি ডেটা পাইপলাইনের জন্য হবে ("প্রদত্ত ২, এটিকে ৩ দিয়ে গুণ করুন, ২ যোগ করুন এবং ১" দ্বারা ভাগ করুন "), তবে async.seriesসেই বিচ্ছিন্ন কাজগুলির জন্য যাতে যথাযথভাবে সম্পাদন করা আবশ্যক, তবে অন্যথায় পৃথক।
waterfallনা seriesএকটি মান ফেরায়। এটি প্রত্যাশিত যে ফলাফল যাই হোক না কেন এটি alচ্ছিক কলব্যাক প্যারামিটারে ব্যবহৃত হবে।
উভয় ফাংশন প্রতিটি ফাংশনের রিটার্ন মান পরেরটিতে পাস করে, তারপরে কোনও ত্রুটি ঘটলে তার ত্রুটিটি পেরিয়ে গেলে মূল কলব্যাক কল করবে।
পার্থক্যটি হ'ল async.series(), একবার সিরিজ শেষ হয়ে গেলে, সমস্ত ফলাফলগুলি মূল কলব্যাকে চলে যাবে। async.waterfall()মূল কলব্যাকের কাছে পৌঁছে যাবে শুধুমাত্র ডাকা শেষ ফাংশনের ফলাফল।
async.waterfall()একটি সঙ্গে ডিল হয় action that relies on the previous outcome।
async.series() একটি ক্রিয়া যা করতে চায় তা নিয়ে কাজ করছে see all the result at the end
আমি async. ওয়াটারফলকে ক্ষতিকারক হিসাবে বিবেচনা করি, কারণ একবার রিফ্যাক্টর লেখা শক্ত এবং ত্রুটি-ঝুঁকির কারণ আপনি যদি আরও যুক্তি সরবরাহ করেন তবে অন্যান্য ক্রিয়াকলাপগুলি স্বাক্ষরটিকে অনেক পরিবর্তন করে।
async.autoInjectAsync.waterfall হিসাবে আমি দুর্দান্ত বিকল্প হিসাবে সুপারিশ করছি।
https://caolan.github.io/async/autoInject.js.html
যদি আপনি অ্যাসিঙ্ক.ওয়াটারফ্রোল ব্যবহার করা বেছে নেন, তবে আমি আপনাকে একটি বস্তুতে সমস্ত কিছু সংরক্ষণ করার পরামর্শ দিচ্ছি, যাতে আপনার ফাংশনগুলিকে দৈর্ঘ্য / স্বাক্ষরগুলি পরিবর্তন করতে হয় না, যেমন:
সতর্কতা: এটি একটি খারাপ প্যাটার্ন
async.waterfall([
cb => {
cb(null, "one", "two");
},
(one, two, cb) => {
cb(null, 1, 2, 3, 4);
},
(one,two,three,four,cb) => {
// ...
}
])
উপরের উপায়ে এটি করবেন না এটি ব্যবহার করার জন্য এটি আরও ভাল প্যাটার্ন :
async.waterfall([
cb => {
cb(null, {one:"one", two:"two"});
},
(v, cb) => {
cb(null, [1, 2, 3, 4]);
},
(v,cb) => {
// ...
}
])
ফাংশন আর্গুমেন্টগুলির সঠিক দৈর্ঘ্য রয়েছে তা নিশ্চিত করার চেষ্টা করে আপনি আপনার চুল টানবেন না। প্রথম ফাংশনটি কেবল একটি আর্গ - কলব্যাক গ্রহণ করে। বাকি সমস্তগুলিকে দুটি যুক্তি গ্রহণ করা উচিত - একটি মান এবং কলব্যাক। প্যাটার্নটি আটকে থাকুন এবং আপনি বুদ্ধিমান থাকবেন!