3.1 Promise zəncirlərinin yaradılması
Promise zəncirləri bir neçə asinxron əməliyyatı ardıcıl icra etməyə, bir əməliyyatın nəticəsini növbəti əməliyyata ötürməyə imkan verir. Bu, kodu daha oxunaqlı və idarə olunan edir. Bundan əlavə, promise-lər səhvlərin işlənməsi üçün güclü imkanlar təmin edir ki, bu da etibarlı və sabit tətbiqlər yaratmağa imkan verir.
Əsas konsepsiya
Promise zənciri then
metodundan yeni promise qaytarmaqla yaradılır. Hər bir then
metodu yeni promise qaytarır ki, bu da ardıcıl asinxron əməliyyatlar qurmağa imkan verir.
Sadə promise zənciri nümunəsi
Bu nümunədə hər bir then
metodu öz əməliyyatını yerinə yetirir və nəticəni növbəti then
metoduna ötürür.
const promise = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('Addım 1 tamamlandı');
}, 1000);
});
promise
.then((result) => {
console.log(result); // Çıxaracaq: Addım 1 tamamlandı
return 'Addım 2 tamamlandı';
})
.then((result) => {
console.log(result); // Çıxaracaq: Addım 2 tamamlandı
return 'Addım 3 tamamlandı';
})
.then((result) => {
console.log(result); // Çıxaracaq: Addım 3 tamamlandı
})
.catch((error) => {
console.error(error);
});
Asinxron əməliyyatlarla promise zənciri nümunəsi
Bu nümunədə hər bir then
metodu növbəti addımı yerinə yetirməzdən əvvəl asinxron əməliyyatın bitməsini gözləyir:
function asyncOperation(step) {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(`${step} tamamlandı`);
}, 1000);
});
}
asyncOperation('Addım 1')
.then((result) => {
console.log(result); // Çıxaracaq: Addım 1 tamamlandı
return asyncOperation('Addım 2');
})
.then((result) => {
console.log(result); // Çıxaracaq: Addım 2 tamamlandı
return asyncOperation('Addım 3');
})
.then((result) => {
console.log(result); // Çıxaracaq: Addım 3 tamamlandı
})
.catch((error) => {
console.error(error);
});
3.2 Promise zəncirlərində xətaların işlənməsi
catch
metodu promise zəncirində xətaların işlənməsi üçün istifadə olunur. Əgər hər hansı bir promisede xəta yaranırsa, o ən yaxın catch
metoduna ötürülür. Bu, xətaları mərkəzləşdirilmiş şəkildə işləməyə, kodun oxunaqlığını və dəstəyini yaxşılaşdırmağa imkan verir.
Xətaların işlənməsi nümunəsi
Bu nümunədə Step 2
-də yaranan xəta catch
metodu ilə saxlanılır və sonrakı then
metodları icra olunmur:
function asyncOperation(step, shouldFail = false) {
return new Promise((resolve, reject) => {
setTimeout(() => {
if (shouldFail) {
reject(`${step} failed`);
} else {
resolve(`${step} completed`);
}
}, 1000);
});
}
asyncOperation('Step 1')
.then((result) => {
console.log(result);
return asyncOperation('Step 2', true); // Bu əməliyyat xətayla tamamlanacaq
})
.then((result) => {
console.log(result); // Bu kod işləməyəcək
return asyncOperation('Step 3');
})
.then((result) => {
console.log(result); // Bu kod işləməyəcək
})
.catch((error) => {
console.error('Xəta:', error); // Çıxış: Xəta: Step 2 failed
});
Xətaların xüsusi addımlarda işlənməsi
Bəzən zəncirin icrasını dayandırmadan, müəyyən addımlarda xətaları işləkmək lazımdır. Bunun üçün iç-içə then
və catch
metodlarından istifadə etmək olar.
Xüsusi addımlarda xətaların işlənməsi nümunəsi
Bu nümunədə Step 2
-dəki xəta lokal olaraq işlənir və zəncir bərpa edilmiş dəyərlə davam edir:
function asyncOperation(step, shouldFail = false) {
return new Promise((resolve, reject) => {
setTimeout(() => {
if (shouldFail) {
reject(`${step} failed`);
} else {
resolve(`${step} completed`);
}
}, 1000);
});
}
asyncOperation('Step 1')
.then((result) => {
console.log(result);
return asyncOperation('Step 2', true).catch((error) => {
console.warn('Step 2-də xətanın işlənməsi:', error);
return 'Step 2 xətasından sonra bərpa edildi';
});
})
.then((result) => {
console.log(result); // Çıxış: Step 2 xətasından sonra bərpa edildi
return asyncOperation('Step 3');
})
.then((result) => {
console.log(result); // Çıxış: Step 3 completed
})
.catch((error) => {
console.error('Xəta:', error); // Bu kod işləməyəcək
});
3.3 finally istifadə etmək
finally
metodu, Promise uğurla tamamlanıb-tamamlanmamasına baxmayaraq kodu icra etmək üçün istifadə olunur. Bu metod, resursların təmizlənməsi kimi yekun fəaliyyətlər üçün faydalıdır.
finally istifadə nümunəsi:
function asyncOperation(step, shouldFail = false) {
return new Promise((resolve, reject) => {
setTimeout(() => {
if (shouldFail) {
reject(`${step} uğursuz oldu`);
} else {
resolve(`${step} tamamlandı`);
}
}, 1000);
});
}
asyncOperation('Step 1')
.then((result) => {
console.log(result);
return asyncOperation('Step 2');
})
.then((result) => {
console.log(result);
return asyncOperation('Step 3');
})
.catch((error) => {
console.error('Xəta:', error);
})
.finally(() => {
console.log('Bütün əməliyyatlar tamamlandı'); // Hər bir halda icra olunacaq
});
Bu nümunədə, finally
metodu hər bir halda, xəta baş verib-verməməsindən asılı olmayaraq icra olunur.
GO TO FULL VERSION