我在数组中保留了可变数量的ajax promise。 当所有承诺都完成后,我会做其他事情:
$.when.apply($, promises).then( function(){
var myArgs = [];
if(promises.length == 1){
var myArgs = [];
myArgs[0] = arguments;
}else{
myArgs = arguments;
}
for(i=0; i<myArgs.length; i++){
fileArr[promise2File[i]]['prop1'] = myArgs[i][0].type;
fileArr[promise2File[i]]['prop2'] = myArgs[i][0].message;
}
});
当我使用jquery版本1.6.1时,它完美无缺。但是,当我切换到更新版本(1.8.3)时,如果有多个ajax承诺,我会收到以下js错误。它只需一个承诺即可正常工作:
未捕获的TypeError:对象[object Object]没有方法'progress'
我检查了promisses变量的类型以确保它是数组(使用instanceof Array)并且它是。
如果它有用,这就是我填充promises数组的方式:
var i = 0;
for(var file in fileArr){
if (fileArr.hasOwnProperty(file)){
if(fileArr[file].hasOwnProperty('status')){
if($.inArray(fileArr[file]['status'], ['held','submitted']) !== -1){
promise2File[i] = file; // I need this to map each promise to the corresponding file
promises[i] = parent.myFunc('cancel', [file], false); //myFunc returns the ajax promise
i++;
}
}
}
}
有任何想法为什么我在较新版本的jquery上收到此错误?
答案 0 :(得分:2)
在jQuery 1.8中,该.then版本被删除并替换为一个不接受完成/失败回调的版本,接受完成/失败过滤器。
http://api.jquery.com/deferred.then/
从.then更改为.done可以解决您的问题。
$.when.apply($, promises).done(function(){
1.8之后的 .then
与1.8之前的.pipe
基本相同