如何处理jQueryDeferreds数组?

如何处理jQueryDeferreds数组?

我有一个需要按一定顺序加载数据的应用程序:根URL,然后是模式,然后使用模式和各种数据对象的URL初始化应用程序。当用户导航应用程序时,将加载数据对象,并根据架构验证数据对象并显示数据对象。当用户对数据进行遍历时,模式提供了第一次验证。

初始化有问题。我使用Ajax调用获取根对象$.When(),然后创建一个承诺数组,每个模式对象一个。这很管用。我看到控制台里的东西了。

然后,我看到了对所有模式的提取,因此每个$.ajax()调用都能工作。get chschema()确实会返回一系列承诺。

但是,FinalWHERE()子句从未触发,而“已完成”一词从未出现在控制台上。jQuery-1.5的源代码似乎意味着“NULL”是可以接受的对象,可以传递到$.Wh.Apply(),因为如果没有传入对象,那么当()构建一个内部的Deferred()对象来管理列表时,它是可以接受的。

这使用了Futures.js。如果不是这样,应该如何管理jQueryDeferreds数组?

    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);
        });
    });


SMILET
浏览 402回答 3
3回答

慕森卡

你在找$.when.apply($, promises).then(function(schemas) {      console.log("DONE", this, schemas);}, function(e) {      console.log("My ajax failed");});这也会起作用(对于某些工作的价值,它不会修复损坏的Ajax):$.when.apply($, promises).done(function() { ... }).fail(function() { ... });`你会想通过$而不是null所以this内$.when指jQuery..对源来说这不重要,但它比传递更好null.通过将$.ajax替换为$.when和样本作品所以,这要么是Ajax请求中的问题,要么是传递到FETCH_Schema的数组的问题。
打开App,查看更多内容
随时随地看视频慕课网APP