我正在使用延迟对象数组。该数组的大小为 vble,因此它可以包含一个或多个延迟对象。当处理ajax调用时就会出现问题。代码如下:
$.when.apply($, array_ajax_calls).then(...)
当将 .when 与 .apply 一起使用时,如果数组只有一个 Promise 对象,则响应是一个包含三个对象的数组:
// Return the object, the status and the jqXHR object
[Array[1] , "success", Object ]
如果数组包含多个对象,那么它会像前一个一样返回一组响应。
[
[Array[1] , "success", Object ],
[Array[1] , "success", Object ],
...
]
正如您所看到的,响应是不同的。第一个返回一个包含三个值的数组。第二个返回包含三个值的数组的数组。这使得我必须检查 ajax 调用是否针对一个或多个对象完成,并更改逻辑,因为响应具有不同的格式。
我不明白为什么我应该得到不同的回应。如果我将一组 promise (即使只有一个 promise )传递给 .apply(...) 函数,我期望得到:
[ [Array[1] , "success", Object ] ]
而不是
[Array[1] , "success", Object ]
有什么办法可以得到相同的响应格式吗?
最佳答案
您在问题中提到的行为是设计使然,是由于 $.when()
仅在收到多个参数时创建自己的主 promise 。
但是,非延迟参数被视为返回这些参数的已解决 promise 。因此,您可以系统地将 null
作为额外参数传递给 $.when()
,例如:
$.when.apply($, [null].concat(array_ajax_calls)).then(...)
如果您这样做,then()
回调中的响应将始终采用以下形式:
[
null,
[Array[1] , "success", Object],
...
]
从那里,您只需忽略第一个元素并处理所有其他元素。
关于javascript - JQuery - promise 数组和格式响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20740521/