آشنایی با برنامه نویسی ناهمزمان جاوا اسکریپت: پاسخ به تماس ها، وعده ها و Async/Await

ماهیت ناهمزمان جاوا اسکریپت برای ایجاد برنامه هایی که کاربر پسند، پاسخگو و کارآمد هستند ضروری است. درک ایدههای اساسی برنامهنویسی ناهمزمان، مانند تماسهای برگشتی، وعدهها، و همگامسازی/انتظار، برای ناوبری موفق بسیار مهم است. این راهنما این ایده ها را تشریح می کند و کاربردها، مزایا و معایب آنها را بررسی می کند.
برنامه نویسی ناهمزمان در مقابل برنامه نویسی همزمان
برنامه نویسی همزمان:
- در برنامه نویسی همزمان، وظایف به صورت متوالی اجرا می شوند. برنامه منتظر می ماند تا یک کار قبل از رفتن به کار بعدی تکمیل شود.
- این رویکرد می تواند منجر به ناکارآمدی شود، به ویژه در طول عملیات زمان بر مانند درخواست های شبکه یا پردازش فایل.
نمونه ای از کد همزمان:
function task1() {
console.log("Task 1 started");
for (let i = 0; i < 1e9; i++); // Simulating a long task
console.log("Task 1 completed");
}
function task2() {
console.log("Task 2 started");
for (let i = 0; i < 1e9; i++); // Simulating a long task
console.log("Task 2 completed");
}
task1(); // Executes first
task2(); // Executes after task1 is completed
برنامه نویسی ناهمزمان:
- برنامه نویسی ناهمزمان به وظایف اجازه می دهد تا به طور مستقل اجرا شوند و برنامه را قادر می سازد تا در حالی که منتظر تکمیل برخی از وظایف است، به اجرای سایر عملیات ها ادامه دهد.
- این به ویژه برای کارهایی مانند واکشی داده ها از یک سرور مفید است، جایی که انتظار می تواند در غیر این صورت رابط کاربر را مسدود کند.
چرا به برنامه نویسی ناهمزمان نیاز داریم؟
- پاسخگویی: از عدم پاسخگویی رابط کاربری در طول عملیات طولانی جلوگیری می کند.
- کارایی: امکان اجرای همزمان چندین عملیات، بهینه سازی استفاده از منابع را می دهد.
- تجربه کاربری: تعاملات را با اطمینان از گردش کار صاف و بدون وقفه افزایش می دهد.
تماس های تلفنی
تعریف: یک callback تابعی است که به عنوان آرگومان به تابع دیگری ارسال می شود و پس از اتمام یک کار اجرا می شود.
مثال:
function fetchData(callback) {
console.log("Fetching data...");
setTimeout(() => {
const data = "Data received"; // Simulate fetched data
callback(data); // Execute the callback with the data
}, 2000);
}
fetchData((data) => {
console.log(data); // Logs after data is fetched
});
توضیح:
- را
fetchData
تابع با استفاده از یک تاخیر شبیه سازی می کندsetTimeout
. - پس از پایان تاخیر، تماس برگشتی با داده های واکشی شده اجرا می شود.
مشکلات مربوط به Callbacks:
- برگشت به تماس جهنم: هنگامی که چندین عملیات ناهمزمان به یکدیگر وابسته هستند، تماس های عمیق تو در تو، خواندن و نگهداری کد را سخت می کند.
وعده ها
تعریف: یک وعده شیئی است که نشان دهنده تکمیل (یا شکست) نهایی یک عملیات ناهمزمان و مقدار حاصل از آن است.
مزایا:
- زنجیره عملیات ناهمزمان را ساده می کند.
- مدیریت خطای بهتری را در مقایسه با کال بک ارائه می دهد.
مثال:
function fetchData() {
return new Promise((resolve, reject) => {
console.log("Fetching data...");
setTimeout(() => {
const data = "Data received";
resolve(data); // Resolve the promise with data
}, 2000);
});
}
fetchData()
.then(data => {
console.log(data); // Logs after promise is resolved
})
.catch(error => {
console.error(error); // Handles errors
});
توضیح:
- وعده ها خوانایی را با زنجیر کردن بهبود می بخشد
.then()
برای موفقیت و.catch()
برای رسیدگی به خطا - آنها ساختار تودرتوی معمولی تماس های برگشتی را حذف می کنند.
Async/Await
تعریف: Async/wait قند نحوی است که بر روی وعدهها ساخته شده است و به شما امکان میدهد کد ناهمزمان بنویسید که بیشتر شبیه کد همزمان است.
مزایا:
- خوانایی و قابلیت نگهداری کد را بهبود می بخشد.
- منطق ناهمزمان را ساده تر مدیریت می کند.
مثال:
async function fetchAndLogData() {
try {
const data = await fetchData(); // Wait for the promise to resolve
console.log(data); // Logs after data is fetched
} catch (error) {
console.error(error); // Handles errors
}
}
fetchAndLogData();
توضیح:
- را
async
کلمه کلیدی نشان می دهد که تابع حاوی کد ناهمزمان است. - را
await
کلمه کلیدی اجرا را متوقف می کند تا زمانی که وعده حل شود، و باعث می شود کد همزمان به نظر برسد و در عین حال غیر مسدود باقی بماند.
خلاصه نکات کلیدی
-
همزمان در مقابل ناهمزمان:
- کد همزمان اجرا را تا زمانی که کارها کامل شوند مسدود می کند.
- کد ناهمزمان به سایر وظایف اجازه می دهد تا همزمان اجرا شوند.
-
تماس های تلفنی:
- تابعی برای رسیدگی به نتایج ناهمزمان ارسال می شود.
- مستعد جهنم برگشتی با وابستگی های پیچیده.
-
وعده ها:
- جایگزینی پاکتر برای تماسهای برگشتی، پشتیبانی از زنجیرهسازی و مدیریت خطا.
-
Async/Await:
- کدهای ناهمزمان را خواناتر و قابل نگهداری تر می کند.
با درک و استفاده از این استراتژی ها می توانید برنامه های جاوا اسکریپتی را توسعه دهید که استفاده از آنها موثر و آسان باشد. یادگیری برنامه نویسی ناهمزمان برای تبدیل شدن به یک توسعه دهنده ماهر جاوا اسکریپت ضروری است، چه در حال مدیریت وظایف ساده یا ایجاد گردش کار پیچیده باشید.
من را در : موضوعات لینکدین Github دنبال کنید