Birincisi: Var olmadığı için kullanamazsınız $.Promise();
.
Bir ertelenmiş nesne bir nesnedir oluşturmak bir söz ve onun durumunu değiştirme resolved
veya rejected
. Ertelenmiş değerler, genellikle kendi işlevinizi yazarsanız ve arama koduna bir söz vermek istiyorsanız kullanılır. Siz değerin üreticisisiniz .
Bir söz , adından da anlaşılacağı gibi, gelecekteki değerle ilgili bir sözdür. Bu değeri elde etmek için geri aramalar ekleyebilirsiniz. Söz size "verildi" ve gelecekteki değerin alıcısı sizsiniz .
Sözün durumunu değiştiremezsiniz. Sadece kod oluşturulan kendi durumunu değiştirebilir vaadi.
Örnekler:
1. ( üretmek ) Kendi işlevleriniz için söz-destek sağlamak istediğinizde ertelenmiş nesneleri kullanırsınız. Bir değer hesaplarsınız ve sözün ne zaman çözüleceğini kontrol etmek istersiniz.
function callMe() {
var d = new $.Deferred();
setTimeout(function() {
d.resolve('some_value_compute_asynchronously');
}, 1000);
return d.promise();
}
callMe().done(function(value) {
alert(value);
});
2. ( ileri ) Kendisi bir vaat döndüren bir işlevi çağırıyorsanız, kendi ertelenmiş nesnenizi oluşturmanız gerekmez. Sözünü geri verebilirsin. Bu durumda, işlev değer yaratmaz, ancak onu iletir (bir tür):
function fetchData() {
return $.ajax({...});
}
fetchData().done(function(response) {
});
3. ( alma ) Bazen vaatler / değerler oluşturmak veya iletmek istemezsiniz, onları doğrudan kullanmak istersiniz, yani bazı bilgilerin alıcısısınız:
$('#my_element').fadeOut().promise().done(function() {
});
Tabii ki, tüm bu kullanım durumları da karıştırılabilir. İşleviniz değerin alıcısı olabilir (örneğin bir Ajax çağrısından) ve buna göre farklı bir değer hesaplayabilir (üretebilir).
İlgili sorular: