Open wingmeng opened 5 years ago
var xhr = new XMLHttpRequest(); // 上传进度(监听 upload 的 onprogress 事件) xhr.upload.onprogress = function(e) { var percent = e.loaded / e.total * 100 console.log('上传进度:' + percent + '%'); } // 请求完成 xhr.onload = function() { var resOK = 200; console.log('请求完成'); // 一个完成的请求不一定是成功的请求,故需要判断状态码来确认 if (xhr.status === resOK) { console.log('请求成功') } } // 请求错误 xhr.onerror = function() { console.log('请求失败') } xhr.open('POST', '/upload', true); xhr.send(file);
var maxFileSize = 1 * (1024 * 1024); // 1MB files = [].slice.call(files).filter(function(file) { return file.size <= maxFileSize });
这里用 Promise.all 方法无疑是最合适的,但看题目中的 js 代码没有使用 ES6+,所以这里用 ES5 规范来实现:
Promise.all
ES6+
ES5
// 这里的 files 是第 2 题中处理过的 files files.map(uploadImg); function uploadImg(img) { var xhr = new XMLHttpRequest(); xhr.onload = function() { var resOK = 200; if (xhr.status === resOK) { img._uploaded = true } } xhr.onerror = function() { img._uploaded = false } // 请求结束(无论成功与否) xhr.onloadend = checkUpload; xhr.open('POST', '/upload', true); xhr.send(img); } function checkUpload() { var isDone = files.every(function(file) { return file.hasOwnProperty(_uploaded) }); if (isDone) { console.log('上传已结束'); var result = files.reduce(function(count, cur) { count[cur._uploaded ? 'success' : 'fail'] += 1; return count; }, { success: 0, fail: 0 }); console.log('上传结果:' + '成功' + result.success + '个' + '失败' + result.fail + '个' ); if (result.success === files.length) { console.log('图片全部上传成功') } } }
题目:
我的回答:
第 1 题:
第 2 题:
第 3 题:
这里用
Promise.all
方法无疑是最合适的,但看题目中的 js 代码没有使用ES6+
,所以这里用ES5
规范来实现: