Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript:无法将for循环的索引与其他数字进行比较_Javascript - Fatal编程技术网

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!");
    }
});