۱۰. برنامهنویسی ناهمگام
برنامهنویسی ناهمگام مثل یه پیشخدمت کارکشته است! 🤵♂️. وقتی تو کافه همزمان سفارش میگیری، قهوه درست میکنی و پول رو حساب میکنی بدن اینکه مشتری منتظر بمونه ☕️💨 توی کد هم همینطوره: کارها رو همزمان و بدون قفل کردن برنامه انجام میدی! 🚀
🔄 ۱. Callback ها
📌 معرفی مفهوم Callback
در جاوااسکریپت، توابع شیء اولیه هستند و میتوانیم آنها را به عنوان آرگومان به توابع دیگر پاس دهیم. به این توابع Callback میگوییم.
function greet(name, callback) {
console.log(`سلام ${name}!`);
callback(); // تابع callback اجرا میشود
}
function sayGoodbye() {
console.log("خداحافظ!");
}
greet("علی", sayGoodbye);
// خروجی:
// سلام علی!
// خداحافظ!
⚠️ مشکل Callback Hell
وقتی چندین عملیات ناهمگام به صورت زنجیرهای اجرا شوند، کد به شکل هرم تو در تو درمیآید که به آن Callback Hell میگویند.
getData(function(data1) {
processData(data1, function(data2) {
saveData(data2, function(data3) {
console.log("تمام شد!");
});
});
});
مشکل: خوانایی کم و نگهداری سخت.
🤝 ۲. Promises
📌 معرفی Promise
Promise یک شیء است که نشاندهنده موفقیت یا شکست یک عملیات ناهمگام است.
🔹 وضعیتهای Promise
- Pending (در حال انتظار)
- Fulfilled (موفقیتآمیز)
- Rejected (ناموفق)
🔹 ساخت Promise
const myPromise = new Promise((resolve, reject) => {
const success = true;
if (success) {
resolve("عملیات موفق بود! ✅");
} else {
reject("خطا رخ داد! ❌");
}
});
myPromise
.then(result => console.log(result)) // در صورت موفقیت
.catch(error => console.log(error)); // در صورت خطا
🔹 زنجیرهای کردن Promises
fetchData()
.then(processData)
.then(saveData)
.then(() => console.log("تمام شد!"))
.catch(error => console.log("خطا:", error));
⏳ ۳. Async/Await
📌 معرفی Async/Await
این روش برای سادهسازی کدهای ناهمگام است و کدی شبیه به همگام مینویسیم.
🔹 ساختار اصلی
async function fetchData() {
try {
const data = await someAsyncFunction(); // منتظر میماند تا Promise حل شود
console.log(data);
} catch (error) {
console.log("خطا:", error);
}
}
🔹 مثال کاربردی با API
async function getUserData() {
try {
const response = await fetch('https://api.example.com/users');
const data = await response.json();
console.log(data);
} catch (error) {
console.log("خطا در دریافت داده:", error);
}
}
getUserData();
🌐 ۴. Fetch API
📌 ارسال و دریافت درخواستهای HTTP
Fetch API یک روش مدرن برای کار با درخواستهای شبکه است.
🔹 دریافت داده (GET)
fetch('https://jsonplaceholder.typicode.com/posts')
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.log("خطا:", error));
🔹 ارسال داده (POST)
fetch('https://jsonplaceholder.typicode.com/posts', {
method: 'POST',
body: JSON.stringify({
title: 'عنوان پست',
body: 'متن پست',
userId: 1
}),
headers: {
'Content-type': 'application/json; charset=UTF-8',
},
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.log("خطا:", error));
۵. 🎯 جمعبندی
- Callbackها سادهاند اما منجر به Callback Hell میشوند.
- Promises مدیریت آسانتر و خوانایی بهتری دارند.
- Async/Await کد را شبیه به همگام میکند و خوانایی را افزایش میدهد.
- Fetch API برای کار با درخواستهای HTTP استفاده میشود.
حالا شما میتوانید کدهای ناهمگام را به راحتی بنویسید! 🚀
با آرزوی موفقیت
تیم برندآرا 🤖