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