JavaScript:无法将for循环的索引与其他数字进行比较
我创建了两个按钮:JavaScript:无法将for循环的索引与其他数字进行比较,javascript,Javascript,我创建了两个按钮: <input id="myfile" type="file" name="files[]" multiple="multiple" > <input id="mysubmit" type="submit" value="Upload"> 这是因为上传方法是异步的。 将首先执行2个if语句。如果你把它放在回调中,它可能会工作,也可能不会工作。因为循环结束时,可能会先完成一个(而不是最后一个) 您应该看看async、Wait或Promissions,并阅
<input id="myfile" type="file" name="files[]" multiple="multiple" >
<input id="mysubmit" type="submit" value="Upload">
这是因为上传方法是异步的。 将首先执行2个if语句。如果你把它放在回调中,它可能会工作,也可能不会工作。因为循环结束时,可能会先完成一个(而不是最后一个) 您应该看看async、Wait或Promissions,并阅读相关内容 我认为这应该是如何实施的一个例子:
var bucket = new AWS.S3({params: {Bucket: 'mybucket'}});
function upload(params) {
return new Promise((resolve, reject) => {
bucket.upload(params).on('httpUploadProgress', function(evt) {
console.log("Uploaded :: " + parseInt((evt.loaded * 100) / evt.total)+'%');
}).send(function(err, data) {
if (err){
reject(err);
}
else {
resolve();
}
});
});
}
$("#mysubmit").click(async function() {
var files_arr= $('#myfile').prop("files");
var ErrNum = 0;
for (var i=0; i<files_arr.length; i++){
var params = {Key: files_arr[i].name, ContentType: files_arr[i].type, Body: files_arr[i]};
//try the upload function if it failes, catch it
try {
//await for upload to finish
await upload(params);
}
catch (e) {
//increment ErrNum if upload failed.
ErrNum++;
}
if (i === files_arr.length-1 && ErrNum > 0) {
//do something
}
else if (i === files_arr.length-1 && ErrNum === 0){
alert("Success!");
}
}
//I think it is more efficient if you put your if statements here
if (ErrNum > 0) {
//do something
}
else {
alert("Success!");
}
});
var bucket=new AWS.S3({params:{bucket:'mybucket'}});
函数上传(参数){
返回新承诺((解决、拒绝)=>{
bucket.upload(params).on('httpUploadProgress',函数(evt){
log(“上传::”+parseInt((evt.loaded*100)/evt.total)+'%');
}).send(函数(错误、数据){
如果(错误){
拒绝(错误);
}
否则{
解决();
}
});
});
}
$(“#mysubmit”)。单击(异步函数(){
var files_arr=$('#myfile').prop(“文件”);
var ErrNum=0;
对于(变量i=0;i 0){
//做点什么
}
else if(i==files\u arr.length-1&&ErrNum==0){
警惕(“成功!”);
}
}
//我认为如果你把你的if语句放在这里会更有效率
如果(ErrNum>0){
//做点什么
}
否则{
警惕(“成功!”);
}
});
如果您阅读了有关Promissions的内容,并且了解到使用Promissions.all()一次上传所有内容更有效
我希望这有帮助,祝你好运 上载和发送功能运行不同步。因此,在检查错误数之后,它就完成了。你的方法不是“JS方式”。为什么在收到回调后发生错误时不立即做出反应,而不是增加变量?
if (ErrNum>0){
//do something
}else{
alert("Success!");
}
var bucket = new AWS.S3({params: {Bucket: 'mybucket'}});
function upload(params) {
return new Promise((resolve, reject) => {
bucket.upload(params).on('httpUploadProgress', function(evt) {
console.log("Uploaded :: " + parseInt((evt.loaded * 100) / evt.total)+'%');
}).send(function(err, data) {
if (err){
reject(err);
}
else {
resolve();
}
});
});
}
$("#mysubmit").click(async function() {
var files_arr= $('#myfile').prop("files");
var ErrNum = 0;
for (var i=0; i<files_arr.length; i++){
var params = {Key: files_arr[i].name, ContentType: files_arr[i].type, Body: files_arr[i]};
//try the upload function if it failes, catch it
try {
//await for upload to finish
await upload(params);
}
catch (e) {
//increment ErrNum if upload failed.
ErrNum++;
}
if (i === files_arr.length-1 && ErrNum > 0) {
//do something
}
else if (i === files_arr.length-1 && ErrNum === 0){
alert("Success!");
}
}
//I think it is more efficient if you put your if statements here
if (ErrNum > 0) {
//do something
}
else {
alert("Success!");
}
});