javascript - JQuery - promise 数组和格式响应

标签 javascript jquery jquery-deferred

我正在使用延迟对象数组。该数组的大小为 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/

相关文章:

jquery - 使用 jQuery 切换 CSS 高度?

jquery - 是否可以将单个参数传递给包含两个延迟对象的 $.when ?

jquery - 如何在ajax成功函数中添加flash消息?

javascript - 在同步方法中等待异步方法?

javascript - 从 Ajax 调用中的错误 block 返回延迟的 jQuery

javascript - 无法使用 webpack 在 GitHub Actions 中为生产构建

javascript - Windows Phone 8 IE 1px 水平滚动条

javascript - safari 11 打开多个弹窗

javascript - 如何根据对象的时间属性显示一定时间范围内的对象?

javascript - 在 Express 中接收 Jquery POST 数据