JS da Promise
Promise — bu JavaScript’da asinxron operatsiyaning yakuniy natijasini ifodalovchi obyekt.
- Oddiy qilib aytganda: "Men senga natijani hozir emas, keyin beraman. Agar hammasi yaxshi bo‘lsa — muvaffaqiyat bilan, bo‘lmasa — xato bilan."
let myPromise = new Promise((resolve, reject) => {
let success = true;
if (success) {
resolve("✅ Operatsiya muvaffaqiyatli!");
} else {
reject("❌ Xatolik yuz berdi.");
}
});
myPromise
.then(result => console.log(result)) // muvaffaqiyat bo‘lsa
.catch(error => console.error(error)) // xato bo‘lsa
.finally(() => console.log("Promise tugadi."));
Nima uchun Promise ishlatiladi?
- Callback hell (chuqur ichma-ich funksiyalar)dan qutulish uchun.
- Asinxron kodni boshqarishni osonlashtirish uchun.
- Bir nechta ketma-ket asinxron ishlarni bog‘lash uchun.
Misol fetch()
bilan
fetch("https://jsonplaceholder.typicode.com/posts/1")
.then(response => response.json()) // JSON’ga o‘giradi
.then(data => console.log(data)) // ma’lumotni chiqaradi
.catch(error => console.error(error)); // xato bo‘lsa chiqaradi
Quyidagi misolga e'tibor bering:
let api = 'https://restcountries.com/v3.1/independent?status=true';
const getData = (resourse) => {
return new Promise((resolve, reject) => {
let xhr = new XMLHttpRequest();
xhr.addEventListener('readystatechange', () => {
if (xhr.readyState === 4 && xhr.status ===200) {
const data = JSON.parse(xhr.responseText);
resolve(data)
} else if (xhr.readyState ===4) {
reject('Xatolik yuz berdi')
}
})
Qachonki funksiyani chaqirsak bizga Promise return qilinsa 2 ta metod ajralib chiqadi:
Qachonki resolve() chaqirilsa .then() ishlaydi va reject() chaqirilsa catch() ishlaydi.
Qachonki resolve ishga tushsa resolve()
ichidagi data then
ichidagi callback funksiya parametriga kelib tushadi.
Agar reject ishga tushsa reject()
ichidagi ma'lumot catch
ichidagi callback funksiya parametriga kelib tushadi.
Va biz bu ma'lumotlarni biror o'zgaruvchiga saqlab (data, err) console ga chiqarishimiz mumkin.