Ana içeriğe geç
Modül 7 · Ders 1 ders 4Kurstaki 25/32~12 min
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:

JS
const p1 = Promise.resolve(42);
const p2 = Promise.reject(new Error('oops'));

Sonucun okunması: .then / .catch

JS
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.

JS
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)

JS
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

Egzersiz#js.m7.l1.e1
Denemeler: 0Yükleniyor…

Bir sayı verildiğinde, n'nin iki katıyla çözümlenmiş bir Promise döndüren 'promisedVersion(n)'i tanımlayın.

Düzenleyici yükleniyor…
İpucu göster

return Promise.resolve(n * 2)

3 denemeden sonra çözüm mevcut

Alıştırmayı gözden geçirin

Egzersiz#js.m7.l1.e2
Denemeler: 0Yükleniyor…

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.

Düzenleyici yükleniyor…
İpucu göster

p.sonra((n) => n + 3)

3 denemeden sonra çözüm mevcut