我试图在aura helper上以异步方式读取文件,但是递归没有发生,只执行了一次。该代码非常简单,并尝试了许多方法,但没有一项工作。
我尝试在onload函数上使用return关键字,也尝试使用关键字self,但看起来aura找不到重新调用的函数this.uploadPromise
。
控制器
handleFilesChange:function (component, event, helper) {
var fileSize = component.get("v.FileList")[0].size;
var file = component.get("v.FileList")[0];
helper.uploadPromise(0, fileSize, file).then(function (result) {
console.log('done!!!'+result);
},function (error) {
console.log(error);
}).catch(function (error) {
$A.reportError("error message here", error);
});
}
助手
uploadPromise: function (startposi, endposi, file) {
console.log('coming into recursive function : startposition:' + startposi + ',endpposition' + file.size + '.file:' + file);
var BYTES_PER_CHUNK = 320 * 1024;
return new Promise(function (resolve, reject) {
if (startposi < endposi) {
console.log('Reading from:' + startposi + ',until;' + (startposi + BYTES_PER_CHUNK ) + '/' + endposi);
var chunk = file.slice(startposi, BYTES_PER_CHUNK);
var reader = new FileReader();
reader.readAsArrayBuffer(chunk);
reader.onload = function (e) { // return handler function for 'onload' event
startposi+= e.target.result.byteLength;
console.log('before recursion: startposition:' + startposi + ',endpposition' + file.size + '.file:' + file + ",chunk size:" + e.target.result.byteLength);
this.uploadPromise(startposi, file.size, file);
}
} else {
console.log('finished reading file'); // it shows the content of the file
return new Promise(function (resolve, reject) {
resolve("finish");
})
}
});
}
我希望将递归作为普通的递归调用执行,但只被调用一次。我已经使用纯JavaScript方法测试了此方法,并且效果很好,问题是何时迁移到Salesforce中的Aura。任何帮助我都会欠债。问候。