首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将一组jquery get请求传递给$.when()

将一组jquery get请求传递给$.when()
EN

Stack Overflow用户
提问于 2012-04-28 04:17:52
回答 1查看 659关注 0票数 0

我有以下参数:

代码语言:javascript
复制
a = [{param:'a'}, {param:'b'}, {param:'c'}]

我想为每个参数发出一个get请求,如下所示:

代码语言:javascript
复制
a.map(function(ai){return $.get('myapi/get?ai='+ai.param)})

当所有的get请求都完成后,我该怎么做呢?

我尝试过使用$.when,如下所示:

代码语言:javascript
复制
$.when(
    a.map(function(ai){return $.get('myapi/get?ai='+ai)})
)
.done(function(results){
    results.forEach(function(ri, i){
        ri.success(function(result){
            a[i].result = result
        }
    }
    do_something_with(a)
}

不幸的是,我显然误解了这个$.when().done()习惯用法,因为当我调用do_something_with(a)时,我没有新的.result属性。我猜这是因为when看到的是单个数组,所以直接传递给.done(),而不是等待每个组件get完成。

任何帮助都将不胜感激!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-28 04:19:38

您需要:

代码语言:javascript
复制
$.when.apply($, myArray);

例如,使用Function.apply调用带有this === $$.when(),其余参数是数组myArray的内容,其中该数组包含每次调用$.get返回的延迟对象。

要回答注释中的第二个问题,可以通过此map函数传递延迟对象数组,该函数返回一个新的延迟对象数组,该数组将在每次AJAX调用完成时解析,无论调用是否成功。

代码语言:javascript
复制
var alwaysDef = def.map(function(old) {
    var def = $.Deferred();
    old.always(def.resolve);
    return def;
});

请注意,我不确定在这个实例中,哪些参数(如果有的话)最终将被传递给最终的.done函数。

如果这很重要,延迟对象总是按顺序调用的,所以您可以为每个原始promises注册一个.done处理程序,该处理程序将AJAX结果存储在一个数组中供以后使用,并注册一个.fail处理程序来存储一个null值。

这将确保在每个单独的结果可用之前不会调用最终的.when处理程序。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10357284

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档