【发布时间】:2014-04-23 07:10:25
【问题描述】:
我有一个 javascript 原型对象数组。每个对象都有一个数据和一个延迟对象,如下所示:
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() 函数中,我无法使用数据执行任何操作。我经常收到错误消息:Chrome 控制台中的Uncaught TypeError: Cannot read property 'data' of undefined 指向数组[i]。
此时我尝试获取i的值,发现总是超过数组长度限制。我认为这是因为在解决 dfd 时,循环已达到其最大计数,然后它试图使数组对象超出其限制,这显然是未定义的。
这种情况有什么解决方法吗?我只需要按照数据出现的顺序处理数组对象。
【问题讨论】:
标签: javascript jquery arrays jquery-deferred