Possiedo un'applicazione che richiede il caricamento dei dati in un determinato ordine: l'URL di root, quindi gli schemi, quindi infine l'inizializzazione dell'applicazione con gli schemi e gli URL per i vari oggetti dati. Mentre l'utente naviga l'applicazione, gli oggetti dati vengono caricati, convalidati rispetto allo schema e visualizzati. Come CRUD utente i dati, gli schemi forniscono la convalida di primo passaggio.Come si lavora con una serie di jQuery differite?
Ho un problema con l'inizializzazione. Io uso una chiamata Ajax per recuperare l'oggetto radice, $ .when(), e quindi creare una serie di promesse, una per ogni oggetto 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, quella finale quando la clausola() 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(), poiché when() costruirà un oggetto interno Deferred() per gestire l'elenco se nessun oggetto è passato.
Questo ha funzionato con Futures.js. Come dovrebbe essere gestito un array di jQuery Deferred, 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);
});
});
Ho quasi un problema identico, tranne che ho bisogno di sparare un metodo di "successo" per ogni query ajax in fetch_one, prima che venga stampato "DONE". Come faresti a fare questo? Ho provato a usare .pipe dopo "fetch_one", ma non sembrava funzionare. – CambridgeMike