Yükleniyor...

Promise’ler

Fincan bir paragraftır, #cup. blank ile başlar ve betik çay istemeden önce onu waiting yapar.
pour içeceği döndürmez. Bir Promise döndürür. then ile bu Promise’den içeceği sonra yazmasını istersin. pour altındaki satır hâlâ waiting der. Satır waiting / lida tea olur.

Az önce servis edilen fincan değil

Önceki sayfa done’u serve’e veriyordu. serve dönmeden önce işlevi çağırıyordu, bu yüzden alttaki kayıt zaten lida tea / poured idi. Orada kimse beklemedi.
Burada then’e verdiğin işlev sonraki satırda çalışmaz. pour önce döner. İçecek, bu betik bittikten sonra görünür.

Üç durum

Bir Promise karar verene kadar pending kalır. resolve onu bir değerle yerine getirir. reject onu bir nedenle reddeder. then yalnız yerine gelince çalışır. catch yalnız redde çalışır. Bu sayfada zamanlayıcı yok. Yürütücü resolve ya da reject’i hemen çağırır, işleyiciler yine de betiğin sonunu bekler.

📊 Üç durum

Durum Ne görürsün Kolay karışır
pending fincan hâlâ waiting der içecek fincanda çoktan var
fulfilled then lida tea alır catch da çalışır
rejected catch no leaves alır then içeceği alır

Yürütücü şimdi, işleyici değil

new Promise’e verdiğin işlev hemen çalışır. Bu yüzden resolve("lida tea"), pour dönmeden önce olabilir. then işlevi başkadır. Kuyruğa girer. pour(...) sonrası satır, fincan waiting derken çalışır.

Sonraki satır hâlâ bekliyor

pour("lida") bir Promise’i order içine koyar. Fincan waiting oldu. Kayıt bu sözcüktür, içecek değil.

Fincan hâlâ bekliyor

javascript
function pour(order) {
return new Promise(function (resolve, reject) {
if (order === "") {
reject("no leaves");
return;
}
resolve(order + " tea");
});
}
let cup = document.getElementById("cup");
cup.textContent = "waiting";
let order = pour("lida");
console.log(cup.textContent);

Kayıt waiting. order Promise’dir. lida tea metni değildir.

then içeceği alır

then’i bir işlevle çağır. O işlev resolve’a verilen değeri alır. İçeceği yazar ve kaydeder. Bu kayıt sonraki satırın kaydı değildir. then içindeki kayıttır.

then içeceği yazar

javascript
function pour(order) {
return new Promise(function (resolve, reject) {
if (order === "") {
reject("no leaves");
return;
}
resolve(order + " tea");
});
}
let cup = document.getElementById("cup");
pour("lida").then(function (drink) {
cup.textContent = drink;
console.log(cup.textContent);
});

Kayıt lida tea. Boş metin bu işleyiciye ulaşmaz.

Yaprak yok

pour("") reject("no leaves") çağırıp döner. catch bu nedeni alır. then çalışmaz.

Boş siparişi yakala

javascript
function pour(order) {
return new Promise(function (resolve, reject) {
if (order === "") {
reject("no leaves");
return;
}
resolve(order + " tea");
});
}
pour("").catch(function (reason) {
console.log(reason);
});

Kayıt no leaves.

Promise içecek değildir

order.then bir işlevdir. Bundan order’ın Promise olduğunu, istediğin metin olmadığını anlarsın. Promise’i "lida tea" ile karşılaştırmak yanlış olurdu ve bu parça yalnız then türünü basar.

then bir işlevdir

javascript
function pour(order) {
return new Promise(function (resolve, reject) {
if (order === "") {
reject("no leaves");
return;
}
resolve(order + " tea");
});
}
let order = pour("lida");
console.log(typeof order.then);

Kayıt function.

Fincanın altındaki satır

Betik fincanı waiting yapar ve o sözcüğü hemen ekler. then lida tea ekler ve iki sözcüğü birleştirir. Birleştirme then içindedir, yani betikten sonra, sonraki satırda değil.

Sayfa demosu — söz verilen fincan

html
<!DOCTYPE html>
<html>
<head>
<title>promised-cup — page</title>
</head>
<body>
<p id="cup">blank</p>
<p id="line">…</p>
<script>
function pour(order) {
return new Promise(function (resolve, reject) {
if (order === "") {
reject("no leaves");
return;
}
resolve(order + " tea");
});
}
let cup = document.getElementById("cup");
let seen = [];
cup.textContent = "waiting";
seen.push(cup.textContent);
pour("lida").then(function (drink) {
seen.push(drink);
cup.textContent = drink;
document.getElementById("line").textContent = seen.join(" / ");
});
</script>
</body>
</html>

Satır waiting / lida tea. Waiting hemen geldi. lida tea then içinde geldi. blank sözcüğü gitti. lida tea / poured önceki sayfadır.

Tezgâhta

  1. Fincanı waiting yap, pour("lida") çağır ve fincanı hemen kaydet. Kayıt waiting.
  2. İçeği then içinde fincana yaz. O kayıt lida tea.
  3. pour("") çağır ve nedeni catch ile yakala. Kayıt no leaves.
  4. typeof order.then oku. Kayıt function.
  5. Sayfa satırını oku: waiting / lida tea.

Tezgâhtaki kaçırmalar

then çalışana kadar fincan waiting der. poured demez.

  • pour altındaki kaydın lida tea olmasını beklemek
  • Dönen değeri içecek metni sanmak
  • Boş siparişte then kullanıp no leaves’i kaçırmak
  • lida için catch kullanıp no leaves beklemek
  • Satırı lida tea / poured okumak

Bunu tut

  • pour bir Promise döndürür, lida tea metnini değil
  • Sonraki satır hâlâ waiting kaydeder
  • then bu betikten sonra lida tea alır
  • Boş sipariş no leaves ile reddedilir ve catch bunu kaydeder
  • Sayfa satırı waiting / lida tea

🧠 Bilginizi Test Edin

Başlamaya Hazır

Bilginizi Test Edin

Bu interaktif sınavla kendini test et ve konuyu ne kadar iyi anladığını gör

❓
5
Sorular
🎯
70%
Geçmek İçin
♾️
∞
Süre
🔄
∞
Deneme

📝 Talimatlar

  • Her soruyu dikkatle okuyun
  • Her soru için en iyi cevabı seçin
  • Quiz'i istediğiniz kadar tekrar alabilirsiniz
  • İlerlemeniz üstte gösterilecek