Как вы работаете с массивом отложенных jQuery?

У меня есть приложение, которое требует загрузки данных в определенном порядке: корневой 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);
        });
    });
132
задан Bergi 5 May 2015 в 13:40
поделиться