$.when 有任意数量的延迟对象? [复制]

Posted

技术标签:

【中文标题】$.when 有任意数量的延迟对象? [复制]【英文标题】:$.when with arbitrary number of deferred objects? [duplicate] 【发布时间】:2016-02-26 02:43:51 【问题描述】:

我有一个任意大小的 url 数组,我需要执行 AJAX 请求:

var urls = [
  "www.whatever.com",
  "www.somesite.com/some/path"
];

我需要向它们发出 AJAX 请求,并按照它们在数组中指定的顺序将它们的响应输出到 DOM。我认为这将是 jQuery 的 $.when() 的完美用例。

var promises = [];
for (index in urls) 
  promises.push($.ajax(urls[index]));

$.when(promises).done(function(data) // <--- I guess you can't do this?
  // do something 
);

但根据文档,您必须使用逗号分隔列表将延迟函数传递给它。

$.when( $.ajax( "/page1.php" ), $.ajax( "/page2.php" ) )
  .then( myFunc, myFailure );

这会迫使您对要发送的延迟对象的数量进行硬编码。在我的情况下,我的数组中的项目数会随着页面的变化而变化。是否可以将 ajax 请求数组传递给$.when(),这样我发送的 ajax 请求数就无关紧要了?

【问题讨论】:

你可以试试$.when.apply($, promises).then(function(responses) 是的,就像您将值数组传递给您正在调用的任何函数一样:.apply. 请在提出新问题之前使用搜索。 【参考方案1】:

您需要将Function.prototype.apply 用作$.when.apply($, promises),而不是$.when(promises)

请注意,这也意味着您的 then 回调可能需要使用 arguments 集合来访问每个延迟的相关结果。

【讨论】:

以上是关于$.when 有任意数量的延迟对象? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

带有任意键的对象的打字稿接口? [复制]

PHP 函数可以接受无限数量的参数吗? [复制]

drools when写条件判断时能加循环吗?我有多个条件要进行判断,而且条件的数量未知。

任意数量集合的笛卡尔积

如何在 SQL 中处理任意数量的间隔?

Django:使用 Q 对象对任意数量的输入进行动态过滤(OR & AND)