使用Array的AJAX Promises

我正在尝试使用promises进行几次AJAX调用(让我们说2)。 基本上我希望能够将两个响应合并在一起,对它们进行整体分析,然后吐出响应。 现在,我有:

var responseArray = []; for (var i=0; i<letsSayTwo; i++) { responseArray.push(someAjaxCall(data)); }; responseArray.done(function(response) { var spit = someAnalysis(response); console.log(spit); }); responseArray.fail(function(response) { console.log('fail'); }); 

就目前而言,我得到一个“未捕获的TypeError:对象[对象数组]在控制台中没有方法’完成’”错误。 我是否认为我不能使用这种方法? 我查看了使用( http://gregfranko.com/blog/jquery-best-practices/ )中的以下代码,但我似乎无法得到我需要的响应。

 $.when.apply(this, responseArray).then(function(response) { console.log(response); }); 

相反,我得到的是[响应,“成功”,响应],其中第一个响应是其中一个AJAX调用的正确返回响应,最后一个响应是实际调用本身。 我应该如何从两个AJAX调用中获得正确的响应?

我希望这一切都有道理。 谢谢!

就目前而言,我得到一个Uncaught TypeError: Object [object Array] has no method 'done'在控制台中Uncaught TypeError: Object [object Array] has no method 'done'错误。 我是否认为我不能使用这种方法?

不是arrays,是的。 您只能在Promise和Deferred对象上调用此方法,例如$.when.apply(this, responseArray)生成的$.when.apply(this, responseArray)

……但我似乎无法得到我需要的回应。 相反,我得到的是[response, "success", response] ,其中第一个响应是其中一个AJAX调用的正确返回响应,最后一个响应是实际调用本身。

正如$.when的文档中所述,它使用多个参数解析结果promise – 当输入promises自身产生多个值(例如$.ajax )时,每个参数都是相应promise解析的参数对象。 你只得到第一个response ,但有回调的responseArray.lengthletsSayTwo )参数。

我该如何从两个AJAX调用中获得正确的响应?

您想从每个arguments对象中提取第一个项目(响应数据),因此您可以使用map

 $.when.apply(this, responseArray).done(function() { var responses = $.map(arguments, function(args) { return args[0]; }), spit = someAnalysis(responses); console.log(spit); }).fail(function(jqXHR, textStatus, errorThrown) { console.log('fail: '+textStatus); });