jQuery Deferred の配列をどのように操作しますか? [重複] 質問する

jQuery Deferred の配列をどのように操作しますか? [重複] 質問する

特定の順序でデータを読み込む必要があるアプリケーションがあります。ルート URL、スキーマ、そして最後にさまざまなデータ オブジェクトのスキーマと URL を使用してアプリケーションを初期化します。ユーザーがアプリケーション内を移動すると、データ オブジェクトが読み込まれ、スキーマに対して検証されて表示されます。ユーザーがデータを CRUD すると、スキーマによってファースト パス検証が行われます。

初期化に問題があります。Ajax 呼び出しを使用してルート オブジェクト $.when() を取得し、各スキーマ オブジェクトごとに 1 つずつ、promise の配列を作成します。これでうまくいきました。コンソールにフェッチが表示されます。

次に、すべてのスキーマのフェッチを確認すると、各 $.ajax() 呼び出しが機能します。fetchschemas() は確かに promise の配列を返します。

ただし、最後の when() 句は実行されず、コンソールに「DONE」という単語は表示されません。jquery-1.5 のソース コードでは、オブジェクトが渡されない場合、when() はリストを管理するために内部の Deferred() オブジェクトを構築するため、$.when.apply() に渡すオブジェクトとして「null」が許容されることが示唆されているようです。

これは Futures.js を使用することで機能しました。このようにしない場合は、jQuery Deferred の配列をどのように管理すればよいでしょうか?

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

ベストアンサー1

あなたが探しています

$.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$.whenjQuerynull

$.ajaxをすべて置き換えて$.whenサンプルをモックアップします作品

したがって、これは Ajax リクエストの問題か、fetch_schemas に渡す配列の問題のいずれかです。

おすすめ記事