Ho un'applicazione che richiede che i dati vengano caricati in un certo ordine: l'URL radice, quindi gli schemi, quindi inizializzano infine l'applicazione con gli schemi e gli URL per i vari oggetti dati. Mentre l'utente naviga nell'applicazione, gli oggetti dati vengono caricati, convalidati rispetto allo schema e visualizzati. Quando l'utente CRUD trasmette i dati, gli schemi forniscono la convalida di primo passaggio.
Sto riscontrando un problema con l'inizializzazione. Uso una chiamata Ajax per recuperare l'oggetto root, $ .when (), e quindi creare una matrice di promesse, una per ogni oggetto dello schema. Che funzioni. Vedo il recupero nella console.
Vedo quindi il recupero per tutti gli schemi, quindi ogni chiamata $ .ajax () funziona. fetchschemas () in effetti restituisce una serie di promesse.
Tuttavia, la clausola when () finale non viene mai attivata e la parola "DONE" non viene mai visualizzata sulla console. Il codice sorgente di jquery-1.5 sembra implicare che "null" sia accettabile come oggetto da passare a $ .when.apply (), come quando () costruirà un oggetto interno Deferred () per gestire l'elenco se nessun oggetto è passato.
Questo ha funzionato usando Futures.js. Come dovrebbe essere gestita una matrice di jQuery Deferreds, se non in questo modo?
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);
});
});