Tengo una aplicación que requiere que los datos se carguen en un cierto orden: la URL raíz, luego los esquemas, luego finalmente inicialice la aplicación con los esquemas y las URL para los diversos objetos de datos. A medida que el usuario navega por la aplicación, los objetos de datos se cargan, validan contra el esquema y se muestran. A medida que el usuario CRUD los datos, los esquemas proporcionan validación de primer paso.
Tengo un problema con la inicialización. Utilizo una llamada Ajax para recuperar el objeto raíz, $ .when (), y luego creo una serie de promesas, una para cada objeto de esquema. Eso funciona. Veo la búsqueda en la consola.
Luego veo la búsqueda de todos los esquemas, por lo que cada llamada $ .ajax () funciona. fetchschemas () de hecho devuelve una serie de promesas.
Sin embargo, esa última cláusula when () nunca se activa y la palabra "DONE" nunca aparece en la consola. El código fuente de jquery-1.5 parece implicar que "nulo" es aceptable como un objeto para pasar a $ .when.apply (), como cuando () construirá un objeto interno diferido () para administrar la lista si no hay ningún objeto aprobada en.
Esto funcionó usando Futures.js. ¿Cómo se debe gestionar una matriz de jQuery Deferreds, si no es así?
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);
});
});