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 resolvedveya 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: