[英]How to write a callback for FileReader?
I'm trying to upload multiple attachments. 我正在尝试上传多个附件。 First I'm getting attachments from user interface, then I'm converting them into JSON , then I need to make a server call.
首先,我从用户界面获取附件,然后将它们转换为JSON,然后需要进行服务器调用。 In this I'm using FileReader.
在此,我正在使用FileReader。
//showing ajax loader
component.set("v.showLoadingSpinner", true);
//getting attached files
var files = component.find("fileId").get("v.files");
var details = {}; //JS Object need to send server
details.files = [];
for (var i = 0; i < files.length; i++)
{
(function(file) {
var name = file.name;
var reader = new FileReader();
reader.fName = files[i]['name'];
reader.fType = files[i]['type'];
reader.i = i;
reader.onload = function(e) {
var fileContents = reader.result;
var base64 = 'base64,';
var dataStart = fileContents.indexOf(base64) + base64.length;
fileContents = fileContents.substring(dataStart);
var startPosition = 0;
var endPosition = Math.min(fileContents.length, startPosition + 750000);
var getchunk = fileContents.substring(startPosition, endPosition);
var fDetails = {};
fDetails.fileName = reader.fName;
fDetails.base64Data = encodeURIComponent(getchunk);
fDetails.contentType = reader.fType;
details.files.push(fDetails);
}
reader.readAsDataURL(file);
})(files[i]);
// I want to make a server call here with data in "details" object.
console.log(details);
But I'm not getting data in above console log.
Please help me to achieve this. 请帮助我实现这一目标。
You can use promises : 您可以使用promises:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise
https://davidwalsh.name/promises https://davidwalsh.name/promises
https://developers.google.com/web/fundamentals/primers/promises https://developers.google.com/web/fundamentals/primers/promises
Also jQuery provide $.when() function : jQuery还提供$ .when()函数:
https://api.jquery.com/jquery.when/ https://api.jquery.com/jquery.when/
And with promisejs you can do something like this : 使用promisejs,您可以执行以下操作:
function readJSON(filename){
return new Promise(function (fulfill, reject){
readFile(filename, 'utf8').done(function (res){
try {
fulfill(JSON.parse(res));
} catch (ex) {
reject(ex);
}
}, reject);
});
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.