Async.waterfall এবং async.series মধ্যে পার্থক্য কি


উত্তর:


168

এটি প্রদর্শিত হয় যা async.waterfallপ্রতিটি ফাংশনকে তার ফলাফলগুলি পরবর্তী ফাংশনে async.seriesপাস করার অনুমতি দেয়, যখন সমস্ত ফলাফল চূড়ান্ত কলব্যাকে পাস করে। উচ্চতর স্তরে, async.waterfallএকটি ডেটা পাইপলাইনের জন্য হবে ("প্রদত্ত ২, এটিকে ৩ দিয়ে গুণ করুন, ২ যোগ করুন এবং ১" দ্বারা ভাগ করুন "), তবে async.seriesসেই বিচ্ছিন্ন কাজগুলির জন্য যাতে যথাযথভাবে সম্পাদন করা আবশ্যক, তবে অন্যথায় পৃথক।


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

1
@ অ্যান্ডারসগ্রিন: না গ্রন্থাগার উৎস এ খুঁজছি, তন্ন তন্ন waterfallনা seriesএকটি মান ফেরায়। এটি প্রত্যাশিত যে ফলাফল যাই হোক না কেন এটি alচ্ছিক কলব্যাক প্যারামিটারে ব্যবহৃত হবে।
টুইজল

উপরের উত্তরটি ২০১২-তে সঠিক হতে পারে তবে সঠিক উত্তরটি পরবর্তীটির মতোই, যা হ'ল: সিরিজ () নাম হিসাবে বলা হয়েছে যে সিরিজ হিসাবে সমস্ত ফলাফল ফাইনাল কলব্যাকে চলে গেছে, এবং জলপ্রপাতটি শেষ ফলাফলটি পাস করেছে চূড়ান্ত কলব্যাক। দেখুন মজিলা ডেভেলপার
Jeb50

53

উভয় ফাংশন প্রতিটি ফাংশনের রিটার্ন মান পরেরটিতে পাস করে, তারপরে কোনও ত্রুটি ঘটলে তার ত্রুটিটি পেরিয়ে গেলে মূল কলব্যাক কল করবে।

পার্থক্যটি হ'ল async.series(), একবার সিরিজ শেষ হয়ে গেলে, সমস্ত ফলাফলগুলি মূল কলব্যাকে চলে যাবে। async.waterfall()মূল কলব্যাকের কাছে পৌঁছে যাবে শুধুমাত্র ডাকা শেষ ফাংশনের ফলাফল।


1
এটির উত্তরটি হওয়া উচিত ;-)
স্টুয়ার্ট অ্যালেন

@ মারিও "উভয় ফাংশনই পূর্ববর্তী ফাংশনের কলব্যাকটি পাস করে" বা "উভয় ফাংশনই পূর্ববর্তী ফাংশনটির ফলাফলটি পাস করে"?
ব্যবহারকারী1451111

@ user1451111, ফলাফল, LOL ... আমি নিশ্চিত যে আমি প্রথম লিখেছি যদিও ...

26

async.waterfall()একটি সঙ্গে ডিল হয় action that relies on the previous outcome

async.series() একটি ক্রিয়া যা করতে চায় তা নিয়ে কাজ করছে see all the result at the end


1
দুর্দান্তভাবে তৈরি চিত্র। আপনি এগুলি নিজে তৈরি করেছেন বা অন্য কোথাও পেয়েছেন?
user1451111

আপনার উত্তরে ছবিগুলি দেওয়া উচিত, লোকেরা সম্ভবত তাদের / o
Alexander আলেকজান্ডার মিলস

1

আমি 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) => {
     // ...
  }
])

ফাংশন আর্গুমেন্টগুলির সঠিক দৈর্ঘ্য রয়েছে তা নিশ্চিত করার চেষ্টা করে আপনি আপনার চুল টানবেন না। প্রথম ফাংশনটি কেবল একটি আর্গ - কলব্যাক গ্রহণ করে। বাকি সমস্তগুলিকে দুটি যুক্তি গ্রহণ করা উচিত - একটি মান এবং কলব্যাক। প্যাটার্নটি আটকে থাকুন এবং আপনি বুদ্ধিমান থাকবেন!

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