آشنایی با برنامه نویسی ناهمزمان در جاوا اسکریپت

برنامه نویسی ناهمزمان یکی از ویژگی های قدرتمند جاوا اسکریپت است که به شما امکان می دهد کدی بنویسید که بتواند چندین کار را همزمان انجام دهد بدون اینکه اجرای کدهای دیگر را مسدود کند. در این پست، اصول برنامه نویسی ناهمزمان در جاوا اسکریپت را بررسی می کنیم و در مورد تماس های برگشتی، وعده ها و async/wait اطلاعات خواهیم داشت.
تماس های تلفنی
فراخوانی تابعی است که به عنوان آرگومان به تابع دیگری ارسال می شود و در زمان دیگری اجرا می شود. پاسخ به تماس اغلب در عملیات ناهمزمان مانند خواندن یک فایل یا درخواست HTTP استفاده می شود. مطمئن! در اینجا چند مثال ساده تر برای نشان دادن مفاهیم callback، وعده ها و async/wait در جاوا اسکریپت آورده شده است:
در اینجا یک مثال ساده است که از یک تابع تماس برای ثبت یک پیام پس از تاخیر استفاده می کند:
تابع delayedLog (پیام، پاسخ به تماس) {
setTimeout(() => {
console.log(پیام);
callback();
}، 1000)؛
}
delayedLog(‘Hello’, () => {
console.log(‘World’);
})؛
در این مثال، ما یک تابع delayedLog تعریف می کنیم که دو آرگومان می گیرد: یک پیام و یک تابع callback. تابع delayedLog از تابع setTimeout برای ثبت پیام پس از 1 ثانیه (1000 میلی ثانیه) استفاده می کند. پس از ثبت پیام، تابع تماس فراخوانی می شود.
هنگامی که تابع delayedLog را با آرگومان های “Hello” و یک تابع ناشناس که “World” را ثبت می کند فراخوانی می کنیم، موارد زیر اتفاق می افتد:
پیام “سلام” پس از 1 ثانیه تاخیر ثبت می شود.
تابع پاسخ به تماس ناشناس فراخوانی می شود که پیام “World” را ثبت می کند.
وعده ها
Promises روش مدرن تری برای مدیریت عملیات ناهمزمان در جاوا اسکریپت است. یک وعده نشان دهنده ارزشی است که ممکن است هنوز در دسترس نباشد، اما در مقطعی در آینده خواهد بود. Promises یک نحو تمیزتر و خواناتر برای مدیریت عملیات ناهمزمان در مقایسه با callbacks ارائه می دهد.
در اینجا یک مثال ساده است که از یک وعده برای شبیه سازی یک عملیات ناهمزمان استفاده می کند:
function asyncOperation() {
بازگشت وعده جدید ((حل، رد) => {
setTimeout(() => {
حل (‘موفقیت!’);
}، 1000)؛
})؛
}
asyncOperation()
سپس (نتیجه => {
console.log(نتیجه);
})
.catch(خطا => {
console.error(error);
})؛
در این مثال، یک تابع asyncOperation تعریف می کنیم که یک وعده جدید را برمی گرداند. تابع اجرای وعده دو آرگومان می گیرد: حل و رد. تابع executor از تابع setTimeout برای شبیه سازی یک عملیات ناهمزمان استفاده می کند که تکمیل آن 1 ثانیه طول می کشد. پس از اتمام عملیات، تابع Resolution با مقدار ‘Success!’ فراخوانی می شود.
هنگامی که تابع asyncOperation را فراخوانی می کنیم و متد a را به آن زنجیره می زنیم، موارد زیر اتفاق می افتد:
وعده بازگردانده شده توسط تابع asyncOperation با مقدار “موفقیت!” حل می شود. پس از 1 ثانیه تاخیر
تابع callback ارسال شده به متد then با مقدار حلشده به عنوان آرگومان فراخوانی میشود که «موفقیت!» را ثبت میکند.
Async/Await
Async/await یک افزودنی جدیدتر به جاوا اسکریپت است که سینتکس تمیزتر و خواناتری را برای مدیریت عملیات ناهمزمان ارائه می دهد. کلمه کلیدی async برای تعریف یک تابع ناهمزمان استفاده می شود که همیشه یک وعده را برمی گرداند. کلمه کلیدی await در داخل یک تابع async برای توقف اجرای آن تا زمانی که یک وعده حل شود استفاده می شود.
تابع c asyncOperation() {
const result = منتظر وعده جدید (رفع => {
setTimeout(() => {
حل (‘موفقیت!’);
}، 1000)؛
})؛
console.log(نتیجه);
}
asyncOperation();
در این مثال، یک تابع ناهمزمان به نام asyncOperation را با استفاده از کلمه کلیدی async تعریف می کنیم. در داخل این تابع، ما از کلمه کلیدی await برای توقف اجرای آن استفاده می کنیم تا زمانی که وعده بازگشتی توسط عبارت Promise جدید حل شود. مقدار حل شده به متغیر نتیجه اختصاص داده می شود و ثبت می شود.
وقتی تابع asyncOperation را فراخوانی می کنیم، موارد زیر اتفاق می افتد:
وعده بازگردانده شده توسط عبارت Promise جدید با مقدار “موفقیت!” حل می شود. پس از 1 ثانیه تاخیر
اجرای تابع asyncOperation از سر گرفته می شود و مقدار حل شده به متغیر نتیجه اختصاص می یابد.
موفقیت!’ پیام ثبت شده است
نتیجه
برنامه نویسی ناهمزمان یکی از ویژگی های قدرتمند جاوا اسکریپت است که به شما امکان می دهد کدی بنویسید که بتواند چندین کار را همزمان انجام دهد بدون اینکه اجرای کدهای دیگر را مسدود کند. در این پست، ما تماسهای برگشتی، وعدهها و async/wait را بررسی کردهایم – سه روش مختلف برای مدیریت عملیات ناهمزمان در جاوا اسکریپت. با درک این مفاهیم، میتوانید کدهای تمیزتر و کارآمدتری برای مدیریت عملیات ناهمزمان در پروژههای جاوا اسکریپت خود بنویسید.