javascript - 循环中的延迟对象

标签 javascript jquery arrays jquery-deferred

我有一个 javascript 原型(prototype)对象数组。每个对象都有一个数据和一个延迟对象,如下所示:

function Obj(data){
     this.dfd=$.Deferred();
     this.data;
}

我有一个函数可以在某些事件期间重置数据,函数如下。

Obj.prototype.resetData=function(){
        var dataFromAjaxCall=//Function containing Ajax calls...Returns data.
        this.data=dataFromAjaxCall;
        this.dfd.resolve();
}

现在,假设我创建了一个 Obj 类型的对象数组,并将其命名为 array。我需要一一调用他们并重置他们的数据。其代码如下:

for(var i=0;i<array.length;i++){
     array[i].resetData();
     array[i].dfd.done(function(){
            //Do something with the data
            process(array[i].data);
     });
}

现在,在 dfd.done() 函数内,我无法使用数据执行任何操作。我经常收到错误消息:Uncaught TypeError: Cannot read property 'data' of undefined in chrome console pointing to array[i].

此时我试图获取i的值,发现它总是超出数组长度限制。我认为这是因为当 dfd 被解析时,循环已达到其最大计数,然后它尝试使数组对象超出其限制,这显然会显示为未定义。

对于这种情况有什么解决方法吗?我只需要按照数据出现的顺序处理数组对象。

最佳答案

这里的问题是 closure variable in a loop 的错误使用,上面的评论显示..

尝试使用$.each()迭代数组

$.each(array, function (i, item) {
    item.resetData();
    item.dfd.done(function () {
        process(item.data);
    });
});

关于javascript - 循环中的延迟对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23237297/

相关文章:

javascript - 如何使用可能值列表过滤选项列表

Javascript/Rails - 如何在 javascript 中包装 link_to 而不是 <an></a>

php - 添加一个选择字段,该字段将更改 Woocommerce 简单产品中的价格

JQuery 简单模式确认不继续

Java文件读取错误

python - 二维 NumPy 数组中每个元素的计数

javascript - 依赖项 ("lodash")在浏览器中运行 Mocha 测试时未找到错误

javascript - 将日期从一种给定格式转换为另一种给定格式

javascript - 使用对象内的对象对数组进行排序

javascript - 在 Javascript 中从二维数组返回字符串