我正在尝试实现一个函数,该函数等待我所有的fileUpload()工作完成。 每个工作都通过jQuery的Promise机制进行监控。 以下是我第一次监视所有上传工作。 (使用setTimeout()模拟fileUpload()函数进行测试)
var numOfFiles = 4;
function updateFile(filename, num)
{
console.log('++updateFile ' + filename);
var d = new $.Deferred;
setTimeout(function(){
console.log('--updateFile ' + filename);
if(num == 100) {
d.reject("Error");
} else {
d.resolve();
}
}, 1000);
return d.promise();
}
var promiseList = [];
for(var i=0; i < numOfFiles; i++) {
promiseList[i] = updateFile("foo_" + i + ".txt", i);
}
// $.when( promiseList[0], promiseList[1], promiseList[2], promiseList[3] ) // This works, but not scalable.
$.when( ...promiseList ) // This works with Chrome, but not IE
.done(function(){ console.log("all pass"); })
.fail(function(e){ console.log("fail:", e); });
console.log("end");
这在带有以下输出的Chrome浏览器中正常工作。
++updateFile foo_0.txt
++updateFile foo_1.txt
++updateFile foo_2.txt
++updateFile foo_3.txt
end
--updateFile foo_0.txt
--updateFile foo_1.txt
--updateFile foo_2.txt
--updateFile foo_3.txt
all pass
但是,它由于IE11的语法错误而失败。通过几次互联网搜索,我了解到IE11不支持阵列扩展操作。谁能帮我解决这个问题。
根据本文, Alternatives of spread syntax
我尝试过
spreadList = [];
Array.prototype.push.apply(spreadList, promiseList);
$.when(spreadList)
但是“全部通过”出现在每个updateFile()函数完成之前。
++updateFile foo_0.txt
++updateFile foo_1.txt
++updateFile foo_2.txt
++updateFile foo_3.txt
all pass
end
--updateFile foo_0.txt
--updateFile foo_1.txt
--updateFile foo_2.txt
--updateFile foo_3.txt
感谢您的帮助!