Tengo una aplicación que requiere que los datos se carguen en un orden determinado: la URL raíz, luego los esquemas, y finalmente inicializan la aplicación con los esquemas y las direcciones 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 CRUDE los datos, los esquemas brindan validación de primer paso.¿Cómo se trabaja con una matriz de jQuery diferidos?
Tengo un problema con la inicialización. Uso una llamada Ajax para buscar el objeto raíz, $ .when(), y luego creo una matriz 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() realmente devuelve una serie de promesas.
Sin embargo, esa cláusula when() final nunca se dispara 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 Deferred() para administrar la lista si no hay ningún objeto pasado.
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);
});
});
tengo casi un problema idéntico, excepto que necesito para disparar un método de "éxito" para cada consulta ajax en fetch_one, antes de imprimir "DONE". ¿Cómo harías para hacer esto? Intenté usar .pipe después de "fetch_one", pero eso no pareció funcionar. – CambridgeMike