5

一部のデータを取得する関数があり、関数は約束を返す必要があります。この関数では、2 つの要求を次々と行う必要があります。resolves関数が返す遅延器の最後の呼び出しがネストされた遅延器呼び出しになりました。私はこの延期されたものに不慣れで、これが正しい解決策であるかどうか疑問に思っています。

function getData(func) {
    var model = new Model();
    var collection = new Collection();
    var dfd = new jQuery.Deferred();

    collection.fetch().then(function () {
        model.fetch().then(function () {
            dfd.resolve(collection);
        });
    });

    return dfd.then(function (collection) {
        return getViews(func(collection), model);
    });
}
4

2 に答える 2

5

呼び出しの順序が重要でない場合は、http://api.jquery.com/jQuery.whenを使用することをお勧めします

並列xhrwhenリクエストを作成できます。

于 2013-06-13T19:16:07.007 に答える
5

Andreas、あなたは Vitaliy の回答を非常に正しく受け入れているようです。私は彼のポイントを盗もうとしているわけではありませんが、念のために言っておくと、自分$.Deferred()で作成して解決する必要はなく、渡す必要もありませんcollection(を除くfunc())範囲内にあるので。

質問のコードからわかる限り、次のように動作するはずです。

function getData(func) {
    var collection = new Collection();
    var model = new Model();
    return $.when(collection.fetch(), model.fetch()).then(function() {
        return getViews(func(collection), model);
    });
}
于 2013-06-13T21:34:12.213 に答える