JQuery - 延迟对象数组的 $.when 语法

标签 jquery syntax deferred

这是我第一次使用$.when我在语法上遇到困难。
我的代码类似于下面的简化示例。它有效(如果我在简化时没有引起错误)。 我的问题是我不知道 customerIds 的许多元素数组将包含。

var customerIds = new [1, 2, 3];

$.when(
    getCustomerData(customerIds[0]),
    getCustomerData(customerIds[1]),
    getCustomerData(customerIds[2])
).then(function() {
    alert('success');
}).fail(function() {
    alert('error');
});

function getCustomerData(int id) {
    return new $.Deferred(function(defer) {
                    doSomeWork(id, defer);
    }).promise();       
}

我想写$.when语句如下,但很难获得正确的语法。

$.when(
    getCustomerDataCalls(customerIds),
).then(function() {
    alert('success');
}).fail(function() {
    alert('error');
});

哪里getCustomerDataCalls实现为:

function getCustomerDataCalls(customerIds) {
    var dfds = [];

    for (var id in customerIds) {
        dfds.push(new $.Deferred(function(defer) {
                                    doSomeWork(id, defer);
                                 }).promise());     
    }

    return dfds;
}

不幸的是,我的实现出了点问题,我无法弄清楚哪里出了问题。我最好的猜测是,返回 Deferred 数组时出现了问题。

更新:
在 lanzz 提到我设计的示例已经返回 Deferred 后,我更新了代码,我更新了示例以包含 doSomeWork

最佳答案

是的,我也偶然发现了这一点:when 不容易允许传递数组。但您可以使用 apply 来实现所需的结果。

$.when.apply($, getCustomerDataCalls(customerIds))

关于JQuery - 延迟对象数组的 $.when 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10893668/

相关文章:

jquery - Ajax : Why success displays 0?

javascript - jQuery 中如何获取最近的前一个元素?

javascript - HTML <script defer> 可以在 <script async> 之前执行吗?

javascript - 使用 jquery 单击单选按钮不会发出警报

javascript - JQuery JCarousel(非精简版)和鼠标滚轮。需要帮忙

python-3.x - 我正在进行 cryptopals 挑战 5。尝试在 kali linux 中运行此脚本时,我在第 5 行遇到语法错误

syntax - 有没有办法在循环的条件表达式中分配一个变量?

sql - 带有子查询的 Oracle PIVOT 子句示例

javascript - 如何跨多个函数处理 Promise?

fortran - 在 Fortran 过程中可以有隐式种类