在ajax调用promises中的.done()函数之前使用回调函数

时间:2018-01-17 09:55:24

标签: javascript jquery ajax

以下是我想要实现的示意图:

#if A

我希望function loadLotsofSomething() { for (var i=0;i<1000;i++) { results.push(loadOneSomething(i)) } $.when.apply(this,results).done(function() { for (var i = 0; i < arguments.length; i++) { //get doSomehting(data) instead of data here } } } function loadOneSomething(i) { return $.ajax({ async : true, url: url, success: function(data){ return doSomething(data); } }); } function doSomething (x) { return x; } 函数在success函数之前执行,因为在循环遍历所有调用之前修改从ajax调用获得的数据更简单。

在我的情况下,无论我放入done函数,我总是在success函数中获取原始数据。

欢迎任何帮助!

1 个答案:

答案 0 :(得分:4)

您想使用链接(通常是承诺的情况)。根本不要使用success;相反,使用then并返回其结果:

function loadOneSomething(i) {
    return $.ajax({
        async : true,
        url: url
    }).then(function(data){
        return doSomething(data);
    });
}

这样,loadOneSomething返回的承诺来自then,而不是来自$.ajax的承诺,其分辨率值是您从then返回的内容。

更多:The jqXHR entry in $.ajaxdeferred.then