Modül dersleri (1/4)
Vaatler: bunlar nelerdir
Söz, gelecekte tamamlanacak bir işlemin sonucunu temsil eden bir değerdir. Üç durumdan birinde olabilir:
- beklemede — işlem hâlâ devam ediyor
- yerine getirildi — başarıyla tamamlandı, bir değer var
- reddedildi — başarısız oldu, bir hata oluştu
Bekleme durumundan çıktığında sonsuza kadar "yerleşir".
Çözümlenmiş bir söz oluşturma
En yaygın iki yol - neredeyse hiçbir zaman yapıcıyla "elle" bir Söz oluşturmayacaksınız:
const p1 = Promise.resolve(42);
const p2 = Promise.reject(new Error('oops'));Sonucun okunması: .then / .catch
Promise.resolve(10).then((v) => {
console.log(v); // 10
});
Promise.reject(new Error('no')).catch((e) => {
console.log(e.message); // 'no'
});.then çözümlenen değer ile çağrılan bir işlevi alır.
.catch reddedilme durumunda hatayla birlikte çağrılan bir işlevi alır.
Zincirleme
Her .then sırayla bir Söz verir: onları zincirleyerek dönüştürebilirsiniz.
Adım adım değer.
Promise.resolve(5)
.then((n) => n * 2)
.then((n) => n + 1)
.then((n) => console.log(n)); // 11.then'den herhangi biri atarsa (veya başarısız olan bir Promise döndürürse), yürütme
sonraki ilk .catch'ye atlar.
Oluşturucu (nadir)
const p = new Promise((resolve, reject) => {
if (Math.random() > 0.5) resolve('ok');
else reject(new Error('no'));
});Bunu yalnızca geri aramaları kullanan bir şeye (örneğin, eski DOM API'leri veya setTimeout) "söz vermeniz" gerektiğinde kullanacaksınız.
Deneyin
Bir sayı verildiğinde, n'nin iki katıyla çözümlenmiş bir Promise döndüren 'promisedVersion(n)'i tanımlayın.
İpucu göster
return Promise.resolve(n * 2)
3 denemeden sonra çözüm mevcut
Alıştırmayı gözden geçirin
Bir sayının Sözünü alan ve +3 sayısının Sözünü döndüren 'incrementThree(p)'yi tanımlayın. Bir .then zinciri kullanın.
İpucu göster
p.sonra((n) => n + 3)
3 denemeden sonra çözüm mevcut