Verilerin belirli bir sırayla yüklenmesini gerektiren bir uygulamam var: kök URL, ardından şemalar, ardından son olarak uygulamayı çeşitli veri nesneleri için şemalar ve URL'lerle başlat. Kullanıcı uygulamada gezinirken, veri nesneleri yüklenir, şemaya göre doğrulanır ve görüntülenir. Kullanıcı verileri CRUD'ladığında, şemalar ilk geçiş doğrulamasını sağlar.
Başlatma ile ilgili bir sorun yaşıyorum. Kök nesnesini ($ .when ()) getirmek için bir Ajax çağrısı kullanıyorum ve ardından her şema nesnesi için bir vaat dizisi oluşturuyorum. Bu işe yarıyor. Konsolda getirmeyi görüyorum.
Daha sonra tüm şemaların getirilmesini görüyorum, böylece her $ .ajax () çağrısı çalışıyor. fetchschemas () gerçekten de bir dizi vaat döndürür.
Ancak, bu son when () cümlesi hiçbir zaman ateşlenmez ve "DONE" kelimesi konsolda asla görünmez. Jquery-1.5'in kaynak kodu, () hiçbir nesne yoksa listeyi yönetmek için dahili bir Deferred () nesnesi oluşturduğunda olduğu gibi, $ .when.apply () 'ye geçirilecek bir nesne olarak "boş" un kabul edilebilir olduğunu ima ediyor gibi görünüyor. geçti.
Bu, Futures.js kullanılarak çalıştı. Böyle değilse, jQuery Ertelemeleri dizisi nasıl yönetilmelidir?
var fetch_schemas, fetch_root;
fetch_schemas = function(schema_urls) {
var fetch_one = function(url) {
return $.ajax({
url: url,
data: {},
contentType: "application/json; charset=utf-8",
dataType: "json"
});
};
return $.map(schema_urls, fetch_one);
};
fetch_root = function() {
return $.ajax({
url: BASE_URL,
data: {},
contentType: "application/json; charset=utf-8",
dataType: "json"
});
};
$.when(fetch_root()).then(function(data) {
var promises = fetch_schemas(data.schema_urls);
$.when.apply(null, promises).then(function(schemas) {
console.log("DONE", this, schemas);
});
});