У меня есть приложение, которое требует, чтобы данные загружались в определенном порядке: корневой URL, затем схемы, а затем, наконец, инициализировали приложение со схемами и URL-адресами для различных объектов данных. Когда пользователь перемещает приложение, объекты данных загружаются, проверяются по схеме и отображаются. Поскольку пользователь CRUD передает данные, схемы обеспечивают проверку первого шага.
У меня возникла проблема с инициализацией. Я использую вызов Ajax для извлечения корневого объекта $.when(), а затем создаю массив из promises, по одному для каждого объекта схемы. Это работает. Я вижу выборку в консоли.
Затем я вижу выборку для всех схем, поэтому каждый вызов $.ajax() работает. fetchschemas() действительно возвращает массив из promises.
Однако этот финал, когда условие() никогда не срабатывает, и слово "DONE" никогда не появляется на консоли. Исходный код для jquery-1.5, по-видимому, подразумевает, что "null" является приемлемым как объект для передачи в $.when.apply(), как если() будет строить внутренний объект Deferred() для управления списком, если ни один объект не является прошел.
Это работало с использованием Futures.js. Как управлять массивом jQuery Deferreds, если не так?
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);
});
});