Eu tenho um aplicativo que exige que os dados sejam carregados em uma determinada ordem: a URL raiz, os esquemas e, finalmente, inicialize o aplicativo com os esquemas e URLs dos vários objetos de dados. À medida que o usuário navega no aplicativo, os objetos de dados são carregados, validados no esquema e exibidos. À medida que o usuário cria os dados, os esquemas fornecem validação de primeira passagem.
Estou tendo um problema com a inicialização. Eu uso uma chamada Ajax para buscar o objeto raiz, $ .when () e, em seguida, crio uma matriz de promessas, uma para cada objeto de esquema. Isso funciona. Eu vejo a busca no console.
Então, vejo a busca de todos os esquemas, para que cada chamada $ .ajax () funcione. fetchschemas () realmente retorna uma série de promessas.
No entanto, a cláusula final when () nunca é acionada e a palavra "DONE" nunca aparece no console. O código-fonte para o jquery-1.5 parece implicar que "nulo" é aceitável como um objeto para passar para $ .when.apply (), pois quando () criará um objeto Deferred () interno para gerenciar a lista se nenhum objeto for Transmitido.
Isso funcionou usando o Futures.js. Como deve ser gerenciada uma matriz de adiados jQuery, se não for assim?
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);
});
});