我需要触发多个请求,保留顺序并忽略错误。作为第一个计时器javascript程序员,在搜索了文档和代码之后,出现了以下模式:
var requests = [];
for (yadda yadda) {
request.push($.ajax())
}
$.when.apply(null, requests).always(function () {
for (var i = 0; i < arguments.length; i++) {
var result = arguments[i];
// do things
}
})
我的理解是,当以这种方式调用时,会创建一个延迟的主延迟,只有在请求中的所有延迟完成时(无论是否成功)都会触发。
不幸的是,上述代码在请求只包含一个元素的情况下不起作用。当发生这种情况时,when
以不同的方式运行,而我的always()回调不接收长度为1的数组,而是接收单个响应对象,解压缩。
我看到了这个问题的解决方案,但没有一个是惯用的(或者是另一种方法)。
答案 0 :(得分:0)
这是一种解决方法,但为什么不使用length
results
来确定您的预期响应?然后,您将始终拥有一个可以使用的预期array
。
if( requests.length == 1 ) {
arguments = [arguments];
}
<强> Working example. 强>
另一个解决方案是更改结构并以正确的jQuery模式使用它。然后,您将始终收到array
的回复,并且没有进一步加倍。
$.when(requests).always(function(response) {
response.forEach(r => console.log(r));
})
<强> Working example. 强>
请注意,你的例子中有一个拼写错误。它应该是requests
,而不是request
。
requests.push($.ajax());