如何处理嵌套的jquery延迟调用

时间:2013-06-13 19:04:10

标签: javascript jquery backbone.js jquery-deferred

我有一个函数来获取一些数据,函数应该返回一个promise。在函数中,我必须一个接一个地提出2个请求。我最终得到了一个嵌套的deferrer调用,其中函数将返回的延迟器上的最后一次调用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);
    });
}

2 个答案:

答案 0 :(得分:5)

如果通话顺序无关紧要,我建议使用http://api.jquery.com/jQuery.when

使用when,您可以进行并行xhr请求。

答案 1 :(得分:5)

安德烈亚斯,我看到你已经非常正确地接受了维塔利的答案而且我并没有试图窃取他的观点,但万一你不知道,没有必要创建和解决你自己的$.Deferred()而且没有需要传递collectionfunc()除外),因为它仍然在范围内。

据我在问题中的代码中可以看出,以下内容应该有效:

function getData(func) {
    var collection = new Collection();
    var model = new Model();
    return $.when(collection.fetch(), model.fetch()).then(function() {
        return getViews(func(collection), model);
    });
}