JavaScript Sözleri
"Bir Sonuç Söz veriyorum!"
"Kod üretmek" biraz zaman alabilen koddur
"Kod tüketen", sonucu beklemesi gereken koddur
Promise, kod üreten ve kod tüketen arasında bağlantı kuran bir JavaScript nesnesidir.
JavaScript Söz Nesnesi
Bir JavaScript Promise nesnesi, hem üreten kodu hem de tüketen koda yapılan çağrıları içerir:
Söz Sözdizimi
let myPromise = new Promise(function(myResolve, myReject) {
// "Producing Code" (May take some time)
myResolve(); // when successful
myReject(); // when error
});
// "Consuming Code" (Must wait for a fulfilled Promise)
myPromise.then(
function(value) { /* code if successful */ },
function(error) { /* code if some error */ }
);
Üreten kod sonucu aldığında, iki geri aramadan birini çağırmalıdır:
Sonuç | Telefon etmek |
---|---|
Başarı | myResolve(sonuç değeri) |
Hata | myReject(hata nesnesi) |
Söz Nesne Özellikleri
Bir JavaScript Promise nesnesi şunlar olabilir:
- Bekliyor
- Yerine getirilmiştir
- Reddedildi
Promise nesnesi iki özelliği destekler: durum ve sonuç .
Bir Promise nesnesi "beklemede" (çalışırken), sonuç tanımsızdır.
Bir Promise nesnesi "yerine getirildiğinde", sonuç bir değerdir.
Bir Promise nesnesi "reddedildiğinde", sonuç bir hata nesnesidir.
myPromise.state | sözüm.sonucum |
---|---|
"Bekliyor" | Tanımsız |
"yerine getirilmiştir" | sonuç değeri |
"reddedilmiş" | bir hata nesnesi |
Promise özellikleri durumuna ve sonucuna erişemezsiniz .
Sözleri işlemek için bir Promise yöntemi kullanmalısınız.
Söz Nasıl Yapılır
Bir Sözü nasıl kullanacağınız aşağıda açıklanmıştır:
myPromise.then(
function(value) { /* code if successful */ },
function(error) { /* code if some error */ }
);
Promise.then() iki argüman alır, başarı için bir geri arama ve başarısızlık için bir geri arama.
Her ikisi de isteğe bağlıdır, bu nedenle yalnızca başarı veya başarısızlık için bir geri arama ekleyebilirsiniz.
Örnek
function myDisplayer(some) {
document.getElementById("demo").innerHTML = some;
}
let myPromise = new Promise(function(myResolve, myReject) {
let x = 0;
// The producing code (this may take some time)
if (x == 0) {
myResolve("OK");
} else {
myReject("Error");
}
});
myPromise.then(
function(value) {myDisplayer(value);},
function(error) {myDisplayer(error);}
);
JavaScript Söz Örnekleri
Sözlerin kullanımını göstermek için önceki bölümdeki geri arama örneklerini kullanacağız:
- Zaman Aşımı Beklemek
- Dosya Beklemek
Zaman Aşımı Beklemek
Geri Aramayı Kullanma Örneği
setTimeout(function() { myFunction("I love You !!!"); }, 3000);
function myFunction(value) {
document.getElementById("demo").innerHTML = value;
}
Promise Kullanan Örnek
let myPromise = new Promise(function(myResolve, myReject) {
setTimeout(function() { myResolve("I love You !!"); }, 3000);
});
myPromise.then(function(value) {
document.getElementById("demo").innerHTML = value;
});
bir dosya bekliyorum
Geri Arama kullanan örnek
function getFile(myCallback) {
let req = new XMLHttpRequest();
req.open('GET', "mycar.html");
req.onload = function() {
if (req.status == 200) {
myCallback(req.responseText);
} else {
myCallback("Error: " + req.status);
}
}
req.send();
}
getFile(myDisplayer);
Promise kullanan örnek
let myPromise = new Promise(function(myResolve, myReject) {
let req = new XMLHttpRequest();
req.open('GET', "mycar.htm");
req.onload = function() {
if (req.status == 200) {
myResolve(req.response);
} else {
myReject("File not Found");
}
};
req.send();
});
myPromise.then(
function(value) {myDisplayer(value);},
function(error) {myDisplayer(error);}
);
Tarayıcı Desteği
ES6 olarak da bilinen ECMAScript 2015, JavaScript Promise nesnesini tanıttı.
Aşağıdaki tablo, Promise nesneleri için tam desteğe sahip ilk tarayıcı sürümünü tanımlar:
Chrome 33 | Edge 12 | Firefox 29 | Safari 7.1 | Opera 20 |
Feb, 2014 | Jul, 2015 | Apr, 2014 | Sep, 2014 | Mar, 2014 |