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.
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.
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.
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.
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.
<!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
- Fincanı waiting yap,
pour("lida")çağır ve fincanı hemen kaydet. Kayıt waiting. - İçeği
theniçinde fincana yaz. O kayıt lida tea. pour("")çağır ve nedenicatchile yakala. Kayıt no leaves.typeof order.thenoku. Kayıt function.- Sayfa satırını oku: waiting / lida tea.
Tezgâhtaki kaçırmalar
then çalışana kadar fincan waiting der. poured demez.
pouraltındaki kaydın lida tea olmasını beklemek- Dönen değeri içecek metni sanmak
- Boş siparişte
thenkullanıp no leaves’i kaçırmak - lida için
catchkullanıp no leaves beklemek - Satırı lida tea / poured okumak
Bunu tut
pourbir Promise döndürür, lida tea metnini değil- Sonraki satır hâlâ waiting kaydeder
thenbu betikten sonra lida tea alır- Boş sipariş no leaves ile reddedilir ve
catchbunu kaydeder - Sayfa satırı waiting / lida tea
🧠 Bilginizi Test Edin
Bilginizi Test Edin
Bu interaktif sınavla kendini test et ve konuyu ne kadar iyi anladığını gör
📝 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