اجرای رویدادهای ناهمزمان با node-async

اجرای رویدادهای ناهمزمان با node-async

0 نظر

نود جی اس با یه رشته تنها (single thread) اجرا میشه، حتی حلقه ها (loop) و رویداد های نا همزمان که برای رویداد های مختلف فراخوانی می شوند، مانند عملیات I/O . در حالی که زبان های دیگر وقتی یه کوئری به دیتابیس می فرستند تا بازگشت جواب منتظر می مانند اما نود جی اس این طور نیست.در نود جی اس وقتی شما کوئری به دیتابیس می فرستید نود تا بازگشت جواب به اجرای کدهای خود ادامه می دهد.

این یه مهفوم قدرتمنده که باعث افزایش بهره وری می شود. اما بعضی وقتا نیاز به کار بیشتری در پایان کد خود برای مقابله با یه سری شرایط خاص دارید. یکی از آن شرایط نیاز به انتظار چندین عملیات ناهمزمان قبل از اجرای کد اضافی است.

برای مثال، شاید شما آرایه ای از آیتم ها داشته باشید و می خواهید در پایگاه داده خود ذخیره کنید. بعد از آنکه  همه آنها ذخیره شدند قصد اجرای تابعی را دارید که می خواهد روی داده های ذخیره شده محاسبات آماری انجام دهد. شاید کدی که به ذهنتان خطور کند به صورت زیر باشد، اما…

اما مشکلی که وجود داره، ممکنه اجرای تابع doSomethingOnceAllAreDone() قبل از اتمام ذخیره داده ها باشد. بهترین راه حل ممکن برای حل این مشکل استفاده از پکیج  node-async که شامل تعدادی از توابع برای مواجه با چنین مشکلات است. با دو ویژگی node-async این مشکل حل میکنیم.

async.each()

تابع async-each آیتم های آرایه را می گیرد سپس طی تکرار رو هر آیتم، آن ها را به عنوان آرگومان به تابعی میفرستد. وقتی این عمل تکمیل شد، یه تابع نهایی رو فراخوانی می کنید.

اجرای همزمان به کمک تابع async-each()

async.parallel()

اگر یه تکرار ساده رو آیتم ها داشته باشید راه حل بالا به خوبی کار می کند، اما اگه وضعیت پیچیده تری داشتیم چه؟ به جای تکرار روی یه یک مجموعه، تابع async.parallel این امکان را می دهد تا دسته ای از توابع ناهمگامِ غیر مرتبط به هم را، به درون آرایه ای بفرستید. سپس تمام تسک های (task) داخل آرایه را اجرا و بعد از اتمام آنها  یک تابع به منظور اتمام پروسه فراخوانی کنید.

اجرای ناهمگام با node async-parallel