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

when您可以进行并行 xhr 请求。

于 2013-06-13T19:16:07.007 回答
5

安德烈亚斯,我看到你已经完全正确地接受了 Vitaliy 的答案,我并不是想窃取他的观点,但以防万一你不知道,没有必要创建和解决你自己的问题$.Deferred(),也没有必要传递collection(除了 to 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 回答